记录
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e3+10;
int n,m;
int f[N][N][2];
int a[N][N];
signed main()
{
cin>>n>>m;
if(n==0||m==0)
{
// cout<<0;
return 0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%lld",&a[i][j]);
}
}
for(int i=0;i<=n+1;i++)
for(int j=0;j<=m+1;j++)
f[i][j][1]=f[i][j][0]=-50000000000;
f[1][1][1]=f[1][1][0]=a[1][1];
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
// f[i][j][0]=max(f[i][j][0],max(f[i][j-1][0],max(f[i][j-1][1],f[i+1][j][0]) ) )+a[i][j];
// f[i][j][1]=max(f[i][j][1],max(f[i-1][j][1],max(f[i][j-1][0],f[i][j-1][1]) ) ) +a[i][j];
if(i==1&&j==1)continue;
f[i][j][1]=max(max(f[i-1][j][1],max(f[i][j-1][0],f[i][j-1][1]) ),f[i][j][1]) +a[i][j];
}
for(int i=n;i>=1;i--)
{
f[i][j][0]=max(f[i][j][0],max(f[i+1][j][0],max(f[i][j-1][1],f[i][j-1][0]) )) +a[i][j];
}
}
cout<<f[n][m][1];
return 0;
}