rt,样例不过,求调。
#include<bits/stdc++.h>
using namespace std;
long long f[1005][1005][3]={};
long long w[1005][1005]={};
#define INF -1e9
long long n,m;
long long dfs(long long x,long long y,long long from)//0:up,1:down,2:left
{
if(x<1||x>n||y>m||y<1)return INF;
if(f[x][y][from]!=INF)return f[x][y][from];
if(from==2)
{
f[x][y][from]=max(dfs(x-1,y,0),max(dfs(x-1,y,1),dfs(x-1,y,2)))+w[x][y];
}
if(from==1)
{
f[x][y][from]=max(dfs(x,y+1,1),dfs(x,y+1,2))+w[x][y];
}
if(from==0)
{
f[x][y][from]=max(dfs(x,y-1,0),dfs(x,y-1,2))+w[x][y];
}
//cout<<f[x][y][from]<<endl;
return f[x][y][from];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>w[i][j];
f[i][j][0]=f[i][j][1]=f[i][j][2]=INF;
}
}
f[1][1][1]=f[1][1][0]=f[1][1][2]=w[1][1];
long long ans=max(dfs(n,m,0),dfs(n,m,2));
cout<<ans<<endl;
return 0;
}