POJ3740精确覆盖(dfs +状压+位运算)
来源:互联网 发布:破解版的软件 编辑:程序博客网 时间:2024/06/06 09:23
// 212K 235ms#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct data{int cnt;unsigned __int64 a[5];void date(){cnt = 0;memset(a,0,sizeof a);}}bt[17];int aa,m,n;bool dfs(int pos,data jtu){if(jtu.cnt == n) return true;if(pos==m) return false; if(dfs(pos+1,jtu)) return true;data jtu_tmp = jtu;int i;for(i=0;i<5;i++){if((jtu_tmp.a[i]&bt[pos].a[i])==0) jtu_tmp.a[i] ^= bt[pos].a[i];else break;}if(i!=5) return false;jtu_tmp.cnt += bt[pos].cnt; if(dfs(pos+1,jtu_tmp)) return true;return false;}int main(){while(cin>>m>>n){for (int i=0;i<m;i++){bt[i].date();for (int j=0;j<n;j++){scanf("%1d",&aa);if(aa==1) {bt[i].a[j/64] ^= 1LL<<(j>64?j%64:j);bt[i].cnt++;}}}data jtc;jtc.date();if(dfs(0,jtc)) cout<<"Yes, I found it\n";else cout<<"It is impossible\n";}return 0;}
这样子写,要对位运算比较熟练才能写,然后我利用了一点,就是 a&b ==0 说明a b在同一个二进制位上不会有相同的1,所以a&b==0的时候可以继续往下穷举。然后基本上就是这样子了
0 0
- POJ3740精确覆盖(dfs +状压+位运算)
- POJ3740-精确覆盖,Dancing_links
- 【POJ3740】Easy Finding DLX(Dancing Links)精确覆盖问题
- 位运算加速---基于poj3740
- POJ 1830(位运算+双向DFS)
- poj3740
- POJ3740
- POJ3740
- poj3740
- 八皇后 位运算dfs
- poj1143 DP+dfs+位运算- -
- hdu 5014(dfs + 位运算)
- UVA-818 dfs + 位运算
- ZOJ_3029_TreasureMap(DancingLinksX精确覆盖)
- POJ_3074_Sudoku(DancingLinksX精确覆盖)
- Dancing Links 精确覆盖问题的快速dfs
- poj_1753 Flip Game(dfs+枚举)/(bfs+位运算)
- **POJ1632 Vase collection ACM解题报告(位运算+DFS)
- Android_Studio的学习1--下载和安装
- Samza的Task是如何运行在Yarn上的
- 关于安卓开发选择android 4.2.2(API 17)应用无法打开的解决办法
- 【Android】别话 AsyncTask
- ubuntu14.04为idea14 webstorm 增加启动栏快捷图标
- POJ3740精确覆盖(dfs +状压+位运算)
- php的面向对象
- linux磁盘分区
- Double 和 Float
- Android 音效 SoundPool
- 供独立游戏开发者参考的2D美工教程
- linux-3.4.2内核移植到jz2440
- Spring定时任务的几种实现
- you try to use the STM32 Library examples with IAR 6.30.6 you get a loot of error