思路:详情见luogu传纸条QwQ出于尊重再次打了一次不想写解析了QwQ
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
int a[101][101];
int dp[51][51][51][51];
int m,n;
int main ()
{
cin>>m>>n;
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for (int k=1;k<=m;k++)
for (int l=1;l<=n;l++)
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
{
dp[k][l][i][j]=max(dp[k-1][l][i][j-1],dp[k][l-1][i-1][j]);
dp[k][l][i][j]=max(dp[k][l][i][j],dp[k-1][l][i-1][j]);
dp[k][l][i][j]=max(dp[k][l][i][j],dp[k][l-1][i][j-1]);
dp[k][l][i][j]+=a[k][l]+a[i][j];
if (k==i&&l==j) dp[k][l][i][j]-=a[k][l];
}
cout<<dp[m][n][m][n];
return 0;
}