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

 

你可能感兴趣的:(NetWork)