二维dp还能懂,四维就只能类比二维dp,其实和二维相近
#include<cstdio>
#include<algorithm>
using namespace std;
int f[60][60][60][60],n,m,mapp[60][60];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&mapp[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=1;k<=n;k++)
for(int p=1;p<=m;p++)
if(i!=k||p!=j||(i==n&&k==n&&p==m&&j==m))//除了最后一点外,都不能走到同一个格子
{
f[i][j][k][p]=max(f[i][j][k][p],f[i-1][j][k-1][p]);
f[i][j][k][p]=max(f[i][j][k][p],f[i-1][j][k][p-1]);
f[i][j][k][p]=max(f[i][j][k][p],f[i][j-1][k-1][p]);
f[i][j][k][p]=max(f[i][j][k][p],f[i][j-1][k][p-1]);
f[i][j][k][p]+=mapp[i][j]+mapp[k][p];
}
printf("%d\n",f[n][m][n][m]);
return 0;
}