#include<bits/stdc++.h>
using namespace std;
#define NIL 1e9
long long a[405][405],pre[405][405];
int main()
{
long long n,m,ans = -NIL,sum,t=0;
cin >> n >> m;
for(int i = 1;i <= n;i++){
for(int j = 0;j < m;j++){ //由于列下标形成环状要取模,所以列下标从0开始
cin >> a[i][j];
ans = max(ans,a[i][j]);
}
}
if(ans <= 0) cout << ans << endl;
else{
for(int i = 1; i <= n; ++i){
for(int j = 0; j < m;++j){
pre[i][j] = pre[i-1][j] + a[i][j];
}
}
for(int i = 1;i <= n; ++i){ //上
for(int j = i;j <= n; ++j){ //下
for(int left = 0; left < m; ++left){ //左
sum = 0;
/*列始终以及环状进行考虑
行分为两种情况,一是正常矩阵,二是上界在下界下方,即行形成环状*/
for(int right = 0; right < m; ++right){ //右
//上界不超过下界
if(i <= j){
t = pre[j][(left+right)% m] - pre[i-1][(left+right)% m];
}
//行形成环状 整个pre一坨减去上界上方一坨再加上包括下界以上的一坨
else{
t = pre[n][(left+right)% m] - pre[i-1][(left+right)% m] + pre[j][(left+right)% m];
}
if(t + sum <= 0) sum = 0;
else sum += t;
ans = max(ans,sum);
}
}
}
}
cout << ans << endl;
}
return 0;
}
/*
3 3
1 -2 3
-4 5 -6
7 -8 9
答案:20
*/
说明:没跑成功,思路是对的,待改正