#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int m,n;
int seat[50][50]={0},step[110][50][50]={0};
int mx(int a1,int a2,int a3,int a4){
a1=max(a1,a2);
a3=max(a3,a4);
return max(a1,a3);
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>seat[i][j];
}
}
for(int stp=1;stp<m+n-1;stp++){
if(stp<m&&stp<n){
for(int i=stp+1;i>1;i--){
for(int j=1;j<i;j++){
step[stp][i][j]=mx(step[stp-1][i][j],step[stp-1][i-1][j],step[stp-1][i][j-1],step[stp-1][i-1][j-1])+seat[i][stp-i+2]+seat[j][stp-j+2];
}
}
}else if(stp<m){
for(int i=stp+1;i>1;i--){
for(int j=stp-n+1;j<i;j++){
step[stp][i][j]=mx(step[stp-1][i][j],step[stp-1][i-1][j],step[stp-1][i][j-1],step[stp-1][i-1][j-1])+seat[i][stp-i+2]+seat[j][stp-j+2];
}
}
}else if(stp<n){
for(int i=m;i>1;i--){
for(int j=1;j<i;j++){
step[stp][i][j]=mx(step[stp-1][i][j],step[stp-1][i-1][j],step[stp-1][i][j-1],step[stp-1][i-1][j-1])+seat[i][stp-i+2]+seat[j][stp-j+2];
}
}
}else{
for(int i=m;i>1;i--){
for(int j=stp-n+1;j<i;j++){
step[stp][i][j]=mx(step[stp-1][i][j],step[stp-1][i-1][j],step[stp-1][i][j-1],step[stp-1][i-1][j-1])+seat[i][stp-i+2]+seat[j][stp-j+2];
}
}
}
}
cout<<step[m+n-2][m][m-1];
return 0;
}
只拿了80分 第8 10测试点没过 求助