POJ 2531 Network Saboteur

  枚举了所有状态 1800+ms过了......

  

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 #include <cstring>
 6 
 7 using namespace std;
 8 
 9 int c[25][25];
10 
11 int MaxSum;
12 
13 bool MarkSubSet[25];
14 
15 void dfs(int cur,int ans,int Sum,int n)
16 {
17     if(cur > n)
18     {
19         int i,j,sum;
20         for(i = 1,sum = 0; i <= n; ++i)
21         {
22             if(MarkSubSet[i])
23             {
24                 for(j = 1; j <= n; ++j)
25                 {
26                     if(MarkSubSet[j] == false)
27                         sum += c[i][j];
28                 }
29             }
30         }
31         MaxSum = MaxSum > sum ? MaxSum : sum ;
32         return ;
33     }
34     MarkSubSet[cur] = true;
35     dfs(cur+1,ans+1,Sum,n);
36     MarkSubSet[cur] = false;
37     dfs(cur+1,ans,Sum,n);
38 }
39 
40 int main()
41 {
42 
43     int n,i,j;
44     while(scanf("%d",&n) != EOF)
45     {
46 
47         for(i = 1; i <= n; ++i)
48         {
49             for(j = 1; j <= n; ++j)
50                 scanf("%d",&c[i][j]);
51         }
52 
53         MaxSum = -1;
54         memset(MarkSubSet,false,sizeof(MarkSubSet));
55 
56         dfs(1,0,n/2,n);
57 
58         printf("%d\n",MaxSum);
59     }
60     return 0;
61 }
View Code

 

posted @ 2013-08-23 10:09  好小孩  阅读(154)  评论(0)    收藏  举报