解題思路:
DFS
#include<iostream>
using namespace std;
int n;
int traff[25][25];
int group1[25],num1 = 0;
int group2[25],num2 = 0;
int ans = 0;
void DFS(int i,int j)
{
if(i == n+1)
{
if(j>ans)
ans = j;
return;
}
int k;
//放入第二組
k = j;
for(int p=0;p<num1;p++)
k += traff[group1[p]][i];
group2[num2] = i;
num2++;
DFS(i+1,k);
num2--;
//放入第一組
k = j;
for(int p=0;p<num2;p++)
k += traff[group2[p]][i];
group1[num1] = i;
num1++;
DFS(i+1,k);
num1--;
return;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>traff[i][j];
group1[0] = 1;
num1 ++;
DFS(2,0);
cout<<ans<<endl;
return 0;
}