题意:有n台电脑,然后给出电脑两两相连的链接速度,把这些电脑分成 两组,组内链接时间为0,求两组的最大链接速度。
一台电脑分两种情况进行DFS,属于第一组或属于第二组。
#include<stdio.h> #include<string.h> int n; int C[25][25]; int f[25]; int ans; void DFS(int a,int sum) { if(a==n) { if(sum>ans) ans=sum; return ; } int temp = 0; for(int i=0;i<a;i++) if(f[i]==2) temp+=C[a][i]; f[a]=1; DFS(a+1,sum+temp); temp=0; for(int i=0;i<a;i++) if(f[i]==1) temp+=C[a][i]; f[a]=2; DFS(a+1,sum+temp); } int main() { while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&C[i][j]); memset(f,0,sizeof(f)); ans=0;f[0]=1; DFS(1,0); printf("%d ",ans); } return 0; }