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 }
View Code

 

posted @ 2013-08-28 09:55  Anti-Magic  阅读(265)  评论(0编辑  收藏  举报