http://poj.org/problem?id=2531 题意:图分为2部分 使之间连接的权值和最大。 分析:开2个左右数组,暴力DFS (算法不理想,数据就20,2000的话时间不敢想像) #include <stdio.h> #include <string.h> int map[21][21]; int left[21],right[21]; int leftnum,rightnum; int n; int max; void dfs(int num) { if(num == n+1) { int k=0; for(int i=1;i<=leftnum;i++) for(int j=1;j<=rightnum;j++) k+=map[left[i]][right[j]]; if(k>max) max=k; return ; } leftnum++; left[leftnum]=num; dfs(num+1); left[leftnum]=0; leftnum--; rightnum++; right[rightnum]=num; dfs(num+1); right[rightnum]=0; rightnum--; return ; } int main() { scanf("%d",&n); memset(map,0,sizeof(map)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&map[i][j]); max=0; leftnum=rightnum=0; dfs(1); printf("%d/n",max); return 0; } 转载请注明,谢谢。