http://lx.lanqiao.cn/problem.page?gpid=T118
#include <iostream>
#include <algorithm>
#include <map>
#include <queue>
#include <cstring>
using namespace std;
const int maxn=505;
const int INF=999999999;
int n,m;
int a[maxn][maxn];
int b[maxn][maxn];
int ans=-INF;
int Cal(int a[]){
int sum=-INF;
int b=0;
for (int i=1;i<=m;i++){
if (b<0) b=a[i];
else b+=a[i];
sum=max(sum,b);
}
return sum;
}
int main(){
cin >> n >> m;
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
cin >> a[i][j];
}
}
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
b[i][j]=b[i-1][j]+a[i][j];
}
}
for (int i=1;i<=n;i++){
for (int j=i;j<=n;j++){
int c[maxn];
for (int k=1;k<=m;k++){
c[k]=b[j][k]-b[i-1][k];
}
ans=max(ans,Cal(c));
}
}
cout << ans << endl;
}