#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>#include<string>#include<queue>#include<map>/* #include <unordered_map> */#include<bitset>#include<vector>voidfre(){system("clear"),freopen("A.txt","r",stdin);freopen("Ans.txt","w",stdout);}voidFre(){system("clear"),freopen("A.txt","r",stdin);}#define ios ios::sync_with_stdio(false)#define Pi acos(-1)#define pb push_back#define fi first#define se second#define ll long long#define ull unsigned long long#define db double#define Pir pair<int, int>#define PIR pair<Pir, Pir>#define m_p make_pair#define INF 0x3f3f3f3f#define esp 1e-7#define mod (ll)(1e9 + 7)#define for_(i, s, e) for(int i = (ll)(s); i <= (ll)(e); i ++)#define rep_(i, e, s) for(int i = (ll)(e); i >= (ll)(s); i --)#define sc scanf#define pr printf#define sd(a) scanf("%d", &a)#define ss(a) scanf("%s", a)
using namespace std;constint mxn =105;int mz[mxn][mxn];int a[mxn];//辅助数组,a[k] 的值为 从mz的某一行到另一行第k列的所有元素的和, 我们要对这个a 数组求 最大字段和,并且把这个最大字段和作为函数返回值返回intf(int n,int a[]){int mx =0, b =0;for_(i,1, n){if(b >0) b += a[i];else b = a[i];if(mx < b) mx = b;}return mx;}intmain(){/* fre(); */int n;while(sd(n)!=EOF){for_(i,1, n)for_(j,1, n)sd(mz[i][j]);int ans =0;for_(i,1, n)//枚举当前子矩阵从第i行开始{memset(a,0,sizeof(a));for_(j, i, n)//遍历从i第行开始的子矩阵,且子矩阵的行数 一次位 j - i + 1;{for_(k,1, n)//a[i] 的值位 从第i行到第j行所第k列的mz中元素和
a[k]+= mz[j][k];
ans =max(ans,f(n, a));}}pr("%d\n", ans);}return0;}