直接dfs了。
/*
POJ: 2531 Network Saboteur
*/
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
using namespace std;
int n;
int map[25][25];
bool group[25];
int result;
void solve(int index, int sum)
{
if(index >= n) {
result = max(result, sum);
return ;
}
group[index] = false;
int tmp = 0;
for(int i = 0; i < index; i++)
tmp += group[i] ? map[index][i] : 0;
solve(index + 1, tmp + sum);
group[index] = true;
tmp = 0;
for(int i = 0; i < index; i++)
tmp += group[i] ? 0 : map[index][i];
solve(index + 1, tmp + sum);
}
int main()
{
//freopen("data.in", "rb", stdin);
while(scanf("%d", &n) != EOF) {
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
scanf("%d", &map[i][j]);
memset(group, false, sizeof(group));
result = -1;
solve(0, 0);
printf("%d\n", result);
}
return 0;
}