UVA 690 Pipeline Scheduling (搜尋+位運算+剪枝)
思路:利用位運算儲存每個通道的放置方法,然後去深搜,要加剪枝。詳細見程式碼
程式碼:
#include <stdio.h> #include <string.h> #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) const int N = 35; int n, p[5], ans, w[N], wn; char str[N]; bool judge(int s0, int s1, int s2, int s3, int s4) { return ((s0&p[0]) == 0 && (s1&p[1]) == 0 && (s2&p[2]) == 0 && (s3&p[3]) == 0 && (s4&p[4]) == 0); } void init() { ans = 10 * n; wn = 0; for (int i = 0; i < 5; i++) { p[i] = 0; scanf("%s", str); for (int j = n - 1; j >= 0; j--) { p[i] = p[i] * 2 + (str[j] == 'X'); } } int s0 = p[0], s1 = p[1], s2 = p[2], s3 = p[3], s4 = p[4]; for (int k = 0; k <= n; k++) { if (judge((s0>>k), (s1>>k), (s2>>k), (s3>>k), (s4>>k))) { w[wn++] = k;//剪枝,開w陣列把不能放的位置剔除掉 } } } void dfs(int s0, int s1, int s2, int s3, int s4, int d, int len) { if (len + w[0] * (10 - d) > ans) return;//關鍵剪枝 if (d == 10) { ans = min(ans, len); return; } for (int i = 0; i < wn; i++) { int ss0 = (s0>>w[i]), ss1 = (s1>>w[i]), ss2 = (s2>>w[i]), ss3 = (s3>>w[i]), ss4 = (s4>>w[i]); if (judge(ss0, ss1, ss2, ss3, ss4)) { dfs(ss0^p[0], ss1^p[1], ss2^p[2], ss3^p[3], ss4^p[4], d + 1, len + w[i]); } } } int main() { while (~scanf("%d", &n) && n) { init(); dfs(p[0], p[1], p[2], p[3], p[4], 1, n); printf("%d\n", ans); } return 0; }
相關推薦
UVA 690 Pipeline Scheduling (搜尋+位運算+剪枝)
題意:10個任務,5個通道,要求每個通道都能放下10個任務且不衝突,然後每個通道的放的方式間隔都是一樣的,問最短需要時間。 思路:利用位運算儲存每個通道的放置方法,然後去深搜,要加剪枝。詳細見程式碼 程式碼: #include <stdio.h> #inc
UVa 690 Pipeline Scheduling
An arithmetic pipeline is designed to process more than one task simultaneously in an overlap- ping manner. It includes function units
[POJ2965]The Pilots Brothers' refrigerator (搜尋/位運算)
題意 遊戲“The Pilots Brothers:跟隨有條紋的大象”有一個玩家需要開啟冰箱的任務。 冰箱門上有16個把手。每個手柄可以處於以下兩種狀態之一:開啟或關閉。只有當所有把手都開啟時,冰箱才會開啟。手柄表示為矩陣4х4。您可以在任何位置[i,j](1≤i,j≤4)更改控制代碼的狀態。但是,這
計蒜客15430 XOR Queries(Trie處理位運算問題)
ron 二進制 進制 插入 我們 整數 容易 位置 xor 題意: 給出一個長度為n的數組C,回答m個形式為(L, R, A, B)的詢問, 含義為存在多少個不同的數組下標k屬於[L, R]滿足C[k] XOR A >= B(式中XOR為異或運算)。 T組測試數
1315 合法整數集(位運算+模擬)
去掉 出現 its eml nbsp out %d 技術分享 aps 1315 合法整數集 題目來源: TopCoder 基準時間限制:1 秒 空間限制:131072 KB 分值: 10 難度:2級算法題 收藏 關註 一個整數集合S是合法的,指S的任意子集
【BZOJ3668】[NOI2014] 起床困難綜合症(位運算思想)
點此看題面 大致題意: 給定一些位運算操作,讓你在\(0\sim m\)範圍內選一個初始值,使其在經過這些運算後得到的結果最大。 前置技能:關於位運算 作為一道位運算的題,如果你不知道什麼是位運算,那就完全做不了了。 關於位運算可以詳見這篇部落格:位運算相關(一)——位運算學習筆記。 接下來,我
Newcoder 18 B.Xor(位運算+dp)
Description 給定長度為nnn的非負整數序列aaa,問有多少個長度為nnn的非負整數序列bbb, 滿足: bi≤aib_i\le a_ibi≤ai b1xorb2xor...xorbn=a
n皇后(位運算版)
其實我也沒覺得多快233333333 #include <cstdio> #include <iostream> #include <algorithm> #i
快速冪(原理,一般,遞迴,位運算演算法)
因為一開始對位運算不是很明白,加上2進位制權值忽然一說像聽了一個新詞,第一次碰見放下了,第二次也,,第三次也,今天就好好把它給看明白。 概念:快速計算底數的n次冪。 例題:(想明白就自己拿出筆紙耐心看下去,自己寫出來的才有自信說看明白了) 求a的b次方;
POJ 1085 Triangle War(極大極小搜尋+alpha-beta剪枝)
// // main.cpp // Richard // // Created by 邵金傑 on 16/8/29. // Copyright © 2016年 邵金傑. All rights reserved. // #include<iostream&g
n皇后問題(位運算優化)
n皇后問題 題目描述: 眾所不知, rly現在不會玩國際象棋。但是,作為一個OIer, rly當然做過八 皇后問題。這裡再囉嗦幾句,皇后可以攻擊到同行同列同對角線,在n*n的方格中擺n個皇后使其互
【題解】codeforces293B[AHSOFNU codeforces訓練賽2 by hzwer]D.Distinct Paths dfs+剪枝+位運算
題目連結 Description You have a rectangular n × m-cell board. Some cells are already painted some of k colors. You need to paint each u
1019 Separate the Animals (35 分)DFS或BFS搜尋+(位運算)狀態去重
題目連結:https://pintia.cn/problem-sets/994805148990160896/problems/994805149963239424 直接暴力搜尋每一種障礙的狀態,用dfs和bfs都可以(我用的dfs),沒找到一種狀態bfs檢查現在有多少個洞,有沒有動物相連。
搜尋_常規DFS_位運算_HDOJ5547_Sudoku
點此開啟題目頁面 Problem Description Yi Sima was one of the best counselors of Cao Cao. He likes to play a funny game himself. It looks like
數獨:dfs+剪枝+位運算+排除冗余+優化搜索順序(未完)
main esp 測試用例 brush 數獨 方案 include blank \n 和藍橋杯以前一個題一樣,但是數據加強了,博主水平有限,沒做出來,先在這裏記錄一下,這裏正解,下面是博主的超時做法。最近準備考研,不能深入學習了。 題目描述 數獨是一種傳統益智遊戲,你需
javascript運算符——位運算符
javascript 二進制 二進制表示 ECMAScript中的所有數值都以IEEE-754 64位格式存儲,但位操作符並不直接操作64位的值,而是以32位帶符號的整數進行運算的,並且返回值也是一個32位帶符號的整數 這種位數轉換使得在對特殊的NaN和Infinity值應用位操作時,這兩個值都會
位運算的特殊運用
font 掌握 一個數 個數 pan nbsp 異或 二進制位 位數 位運算的特殊運用 位運算主要有。&。|。~,^等幾種。這幾種在編程方面能極大地優化程序,所以掌握他們勢在必行,所以就總計一下。 &: 主要能夠用來求某數的當中一個二進制位。經
位運算相關
使用 優化 lin 位數 pan ble 移位 移動 等於 位運算符/移位運算符 運算符 &運算符 操作數1的位操作數2的位&的結果位 1 1 1 1 0 0 0 1 0 0 0 0 |運算符 操作數1的位操作數2的位
位運算符
沒有 各種運算符 plain 簡單 center static lai 第一個 結果 java中有三種移位運算符 << : 左移運算符,num << 1,相當於num乘以2 >> : 右移運算符,num
JAVA 按位運算符的解釋
按位運算符 位運算 按位按位運算符Java定義了幾個按位運算符,可以將其應用於整數類型long,int,short,char和byte。按位運算符對位執行,並執行逐位運算。假設a = 60和b = 13; 現在以二進制格式,他們將如下 -a = 0011 1100b = 0000 1101--------