#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<bits/stdc++.h>
using namespace std;
int dp[20][20000],num[22][22], True[20000];
int n;
bool search_(int a)//判断左右是否相邻
{
int b = a >> 1;
if((b & a) == 0)
return true;
return false;
}
void slove()
{
int cnt = 1;
int now = 1 << n;
for(int i = 0 ; i < now ; i ++)//筛选出所有符合题意要求(不相邻)的所有情况
{
if(search_(i))
True[cnt ++] = i;
}
for(int i = 1 ; i <= n ; i ++)//枚举第i行
{
for(int j = 1 ; j < cnt ; j ++)//枚举第i行的所有情况(一种一种枚举,第i行其中一种一种情况对应i-1行所有情况)
{
int sum = 0;
for(int k = 0 ; k < n ; k ++)
{
if((True[j] & (1<<k)) != 0)
sum += num[i][k + 1];//计算出第i行的枚举出来其中一种情况的值
}
dp[i][j] = sum;
if(i > 1)
{
for(int l = 1 ; l < cnt ; l ++)//枚举第i-1行所有的情况
{
if((True[l] & True[j]) == 0)//判断i-1行与第i行是否存在上下相邻.
dp[i][j] = max(dp[i][j],dp[i-1][l] + sum);
}
}
}
}
int ans = 0;//筛选出最大值
for(int i = 1 ; i < cnt ; i ++)
ans = max(ans,dp[n][i]);
cout<<ans<<endl;
}
int main(void)
{
while(scanf("%d",&n)!=EOF)
{
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j++)
cin>>num[i][j];
slove();
}
}
#include<iostream>
#include<algorithm>
#include<string.h>
#include<bits/stdc++.h>
using namespace std;
int dp[20][20000],num[22][22], True[20000];
int n;
bool search_(int a)//判断左右是否相邻
{
int b = a >> 1;
if((b & a) == 0)
return true;
return false;
}
void slove()
{
int cnt = 1;
int now = 1 << n;
for(int i = 0 ; i < now ; i ++)//筛选出所有符合题意要求(不相邻)的所有情况
{
if(search_(i))
True[cnt ++] = i;
}
for(int i = 1 ; i <= n ; i ++)//枚举第i行
{
for(int j = 1 ; j < cnt ; j ++)//枚举第i行的所有情况(一种一种枚举,第i行其中一种一种情况对应i-1行所有情况)
{
int sum = 0;
for(int k = 0 ; k < n ; k ++)
{
if((True[j] & (1<<k)) != 0)
sum += num[i][k + 1];//计算出第i行的枚举出来其中一种情况的值
}
dp[i][j] = sum;
if(i > 1)
{
for(int l = 1 ; l < cnt ; l ++)//枚举第i-1行所有的情况
{
if((True[l] & True[j]) == 0)//判断i-1行与第i行是否存在上下相邻.
dp[i][j] = max(dp[i][j],dp[i-1][l] + sum);
}
}
}
}
int ans = 0;//筛选出最大值
for(int i = 1 ; i < cnt ; i ++)
ans = max(ans,dp[n][i]);
cout<<ans<<endl;
}
int main(void)
{
while(scanf("%d",&n)!=EOF)
{
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j++)
cin>>num[i][j];
slove();
}
}