rt,被水题切了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
char *p1,*p2,buf[1<<20+5];
inline int read(){
int x=0, f = 1;
char c=gc();
if (c == '-') f = -1;
while(!isdigit(c)){
if (c == '-') f = -1;
c=gc();
}while(isdigit(c)){
x=x*10+(c^48);
c=gc();
}return x*f;
}
const int N = 125;
int n;
int a[N][N], sum[N][N], res, t[N];
int main()
{
n = read();
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
a[i][j] = read();
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
sum[i][j] = sum[i - 1][j] + a[i][j];
for (int i = 1; i <= n; i ++ )
for (int j = i; j <= n; j ++ )
{
t[1] = sum[j][1] - sum[i - 1][1];
res = t[1];
for (int k = 2; k <= n; k ++ ) t[k] = max(0, t[k - 1]) + sum[j][k] - sum[i - 1][k], res = max(res, t[k]);
}
printf("%d\n", res);
return 0;
}