#include <iostream> using namespace std; #define SIZE 20 int data[SIZE + 1][SIZE + 1]; int subnet[2][SIZE]; int maxTraffic = 0; int getTraffic(int node, int netNumber, int size){ int ret = 0; for(int i = 0; i < size; i++){ if(subnet[netNumber][i]){ ret += data[node][i]; } } return ret; } void getMax(int curStep, int targetStep,int curTraffic, int startPos, int size){ if(curStep == targetStep) return; for(int i = startPos; i < size; i++){ subnet[0][i] = 0; subnet[1][i] = 1; int trfficWithSubnet1 = getTraffic(i, 1, size); int trfficWithSubnet0 = getTraffic(i, 0, size); int tmp = curTraffic; curTraffic = curTraffic - trfficWithSubnet1 + trfficWithSubnet0; if(curTraffic > maxTraffic) maxTraffic = curTraffic; getMax(curStep + 1, targetStep, curTraffic, i + 1, size); subnet[0][i] = 1; subnet[1][i] = 0; curTraffic = tmp; } } int main(){ //freopen("input.txt", "r", stdin); int N; cin >> N; for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ cin >> data[i][j]; } } for(int i = 0; i < N; i++){ subnet[0][i] = 1; subnet[1][i] = 0; } maxTraffic = 0; getMax(0, N/2, 0, 0, N); cout << maxTraffic << endl; }