#include<bits/stdc++.h>
using namespace std;
int dp[110][55][55],f[55][55],m,n;
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++){
cin>>f[i][j];
}
dp[3][1][2]=f[1][2]+f[2][1];
dp[3][2][1]=f[2][1]+f[1][2];
for(int i=3;i<=m+n;i++)
for(int j=1;j<i;j++)
for(int k=1;k<i;k++){
if(j!=k){
if(j-k==1)
dp[i][j][k]=max(max(dp[i-1][j-1][k-1],dp[i-1][j][k-1]),dp[i-1][j][k])+f[i-j][j]+f[i-k][k];
else if(k-j==1)
dp[i][j][k]=max(dp[i-1][j-1][k-1],max(dp[i-1][j][k],dp[i-1][j-1][k]))+f[i-j][j]+f[i-k][k];
else
dp[i][j][k]=max(max(dp[i-1][j-1][k-1],dp[i-1][j][k-1]),max(dp[i-1][j][k],dp[i-1][j-1][k]))+f[i-j][j]+f[i-k][k];
}
}
cout<<max(dp[m+n-1][n-1][n],dp[m+n-1][n][n-1]);
return 0;
}
自己在编译器测试时正常,也没有超时,洛谷编译时就RE了4个,想破脑袋也不知道是什么原因。