以下为代码
#include<bits/stdc++.h>
#define MAXN 1001
using namespace std;
int f[MAXN]={0},fx[MAXN]={0},a[MAXN][MAXN]={0};
long long ta[MAXN][MAXN];
int main(){
memset(f,128,sizeof(f));
int n,m;
cin >> n >> m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin >> a[i][j];
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++){
ta[i][j]=ta[i-1][j]+a[i][j];
}
}
int tmp;
f[1]=a[1][1];
for(int i=2;i<=n;i++)
f[i]=f[i-1]+a[i][1];
for(int j=2;j<=m;j++){
for(int i=1;i<=n;i++){
fx[i]=f[i]+a[i][j];
for(int k=1;k<i;k++)
if((tmp=f[k]+ta[i][j]-ta[k][j]+a[k][j])>fx[i])
fx[i]=tmp;
for(int k=i+1;k<=n;k++)
if((tmp=f[k]+ta[k][j]-ta[i][j]+a[i][j])>fx[i])
fx[i]=tmp;
}
for(int i=1;i<=n;i++)
f[i]=fx[i];
}
cout << f[n];
}