注意是第一行和最后一行连起来,第一列和最后一列连起来,一开始一直以为只有列连起来。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=300;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define ss(x) scanf("%d",&x)
int map[maxn][maxn],h[maxn];
int main()
{
int t;
ss(t);
while(t--)
{
int n;ss(n);
int maxsum=-100000000;
rep(i,1,n) rep(j,1,n) {ss(map[i][j]);map[i][j+n]=map[i+n][j]=map[i+n][j+n]=map[i][j];}
rep(i,1,n+n) rep(j,i,n+i-1) {
rep(k,1,n+n) {
h[k]=(i==j)?map[j][k]:h[k]+map[j][k];
}
rep(k,1,n){
int sum=0;
rep(p,k,k+n-1){
if(sum>=0) sum+=h[p];
else sum=h[p];
maxsum=max(maxsum,sum);
}
}
}
cout<<maxsum<<endl;
}
return 0;
}