PKU POJ 2531 Network Saboteur 搜索
暴力搜索也能过,剪枝去掉重复搜索,可以到1s内
View Code
#include <iostream> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; int n,c[25][25]; bool t[25]; int mmax; void dfs(int p,int x) { int i; if(x==0||n-p==x) { if(x>0) for (i=p;i<n;++i) t[i]=true; int total=0; for (i=0;i<n;++i) if(t[i]) for (int j=0;j<n;++j) if(!t[j]) total+=c[i][j]; if(total>mmax) mmax=total; } else { t[p]=true; dfs(p+1,x-1); for (i=p;i<n;++i) t[i]=false; dfs(p+1,x); } } int main() { int i,j; while (scanf("%d",&n)!=EOF) { for (i=0;i<n;++i) for (j=0;j<n;++j) scanf("%d",&c[i][j]); mmax=-1; for (i=1;i<=n/2;++i) { memset(t,false,sizeof(t)); dfs(0,i); } printf("%d\n",mmax); } return 0; }

浙公网安备 33010602011771号