loj 1011(状态压缩+记忆化搜索)

来源:互联网 发布:兔子白网络 编辑:程序博客网 时间:2024/06/01 07:16

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25837

思路:状态压缩+记忆化搜索。

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define FILL(a,b) memset(a,b,sizeof(a)) 7  8 int dp[1<<17],map[17][17]; 9 int n;10 11 int dfs(int state,int m)12 {13     if(state==0)return 0;14     if(dp[state])return dp[state];15     for(int i=0;i<n;i++){16         if(state&(1<<i)){17             dp[state]=max(dp[state],dfs(state&~(1<<i),m-1)+map[i][m]);18         }19     }20     return dp[state];21 }22 23 int main()24 {25     int _case,t=1;26     scanf("%d",&_case);27     while(_case--){28         scanf("%d",&n);29         for(int i=0;i<n;i++)30             for(int j=0;j<n;j++)scanf("%d",&map[i][j]);31         FILL(dp,0);32         printf("Case %d: %d\n",t++,dfs((1<<n)-1,n-1));33     }34     return 0;35 }
View Code

 

0 0