呈上代码:
#include<bits/stdc++.h>
using namespace std;
const int N=2000;
int a[N][N],dp[2*N][N][N],m,n;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
memset(dp,-1,sizeof(dp));
dp[2][1][1]=0;
for(int k=3;k<m+n;k++)
for(int i=1;i<m;i++)
for(int j=i+1;j<=m;j++){
int b=max(dp[k][i][j],max(dp[k-1][i][j],max(dp[k-1][i-1][j],max(dp[k-1][i][j-1],dp[k-1][i-1][j-1]))));
if(b==-1)continue;
dp[k][i][j]=b+a[k-i][i]+a[k-j][j];
}
cout<<dp[m+n-1][m-1][m]<<endl;
return 0;
}
本地样例可以过,但洛谷就是过不去,炸了已经QAQ