题意:
给你n个点以及他们之间交互的值,问把这些点分为2堆,得到的最大值是多少
分析:
暴力dfs即可
ACcode:
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
int a[25][25];
int vis[25];
int ans,n;
void dfs(int x,int num){
vis[x]=1;
int sum=num;
for(int i=1;i<=n;++i)
if(vis[i])sum-=a[x][i];
else sum+=a[x][i];
ans=max(ans,sum);
if(sum>num)
for(int i=x+1;i<=n;++i)
dfs(i,sum);
vis[x]=0;
}
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
scanf("%d",&a[i][j]);
memset(vis,0,sizeof(vis));
ans=-1;
dfs(1,0);
printf("%d\n",ans);
}
return 0;
}