POJ 2531 Network Saboteur 位运算子集枚举
题目: http://poj.org/problem?id=2531
这个题虽然是个最大割问题,但是分到dfs里了,因为节点数较少。。
我试着位运算枚举了一下,开始超时了,剪了下枝,1079MS过了。。
好在我的代码貌似是最短的,只有430B。。。
1 #include <stdio.h> 2 3 int main() 4 { 5 int n, map[20][20]; 6 scanf("%d", &n); 7 for(int i = 0; i < n; i++) 8 for(int j = 0; j < n; j++) 9 scanf("%d", &map[i][j]); 10 int ans = 0; 11 12 //剪枝就是把i++改成了i+=2,让i总是奇数 13 for(int i = 1; i < (1<<n); i += 2) 14 { 15 int sum = 0; 16 for(int j = 0; j < n; j++) 17 { 18 if(i & (1<<j)) 19 { 20 for(int k = 0; k < n; k++) 21 if((~i) & (1<<k)) 22 sum += map[j][k]; 23 } 24 } 25 if(sum> ans)ans = sum; 26 } 27 printf("%d\n", ans); 28 return 0; 29 }