poj2531 对称性剪枝

刚开始把n看成10000了, 汗

题意,给一个完全图,求最大割。据说这是一个NP难的问题
第一次写对称性剪枝

scanf才过,而且找最大值必须这样写==
随机化也行

//poj2531 #include <iostream> using namespace std; int n,i,j,t,a[21][21],ans; bool v[21]; void dfs(int k, int s) { int i; if (s==0) { int tmp=0; for (i=1;i<=n;i++) if (v[i]) for (j=1;j<=n;j++) if (i!=j && !v[j]) tmp+=a[i][j]; if (tmp>ans) ans=tmp; return; } for (i=k;i<=n;i++) if (!v[i]) { v[i]=true; dfs(i+1,s-1); v[i]=false; } } int main() { ans=0; scanf("%d",&n); for (i=1;i<=n;i++) for (j=1;j<=n;j++) scanf("%d",&a[i][j]); for (i=1;i<=n/2;i++){ memset(v,false,sizeof(v)); dfs(1,i); } printf("%d/n",ans); system("pause"); return 0; }

你可能感兴趣的:(System)