#include <bits/stdc++.h>
using namespace std;
const int N=55;
int n,m,f[2*N][N][N],a[N][N];
int m,n,a[N][N],f[2*N][N][N];
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
memset(f,-1,sizeof(f));
f[2][1][1]=0;
for(int k=3;k<n+m;k++){
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
int s=max(f[k][i][j],max(f[k-1][i][j],max(f[k-1][i-1][j],max(f[k-1][i][j-1],f[k-1][i-1][j-1]))));
if(s==-1)continue;
f[k][i][j]=s+a[k-i][i]+a[k-j][j];
}
}
}
printf("%d",f[m+n-1][n-1][n]);
return 0;
}
如果用第四行的定义就可以AC,用第五行的就会RE一半的点。我不理解有什么区别,求大佬指点/bx/bx/bx