#include <stdio.h>
using namespace std;
int m,n,data[51][51],f[1001][51][51];
int max0(int a,int b,int c,int d)
{ int u;
u=a;
if(b>u) u=b;
if(c>u) u=c;
if(d>u) u=d;
return u;
}
int main()
{ scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&data[i][j]);
f[1][1][1]=data[1][1];
for(int i=2;i<=m+n-1;i++)//阶段
for(int x1=1;x1<=n;x1++)//枚举x1的横坐标
for(int x2=1;x2<=n;x2++)//枚举x2的横坐标
if(1+i-x1>=0&&1+i-x2>=0)
{ f[i][x1][x2]=max0(f[i-1][x1-1][x2],f[i-1][x1-1][x2-1],f[i-1][x1][x2-1],f[i-1][x1][x2]);
if(x1!=x2) f[i][x1][x2]+=(data[x1][1+i-x1]+data[x2][1+i-x2]);
if(x1==x2) f[i][x1][x2]+=(data[x1][1+i-x1]);}
printf("%d",f[m+n-1][n][n]);
return 0;
}
第三个点数据:
8 6
0 94 11 25 24 51
15 13 39 67 97 19
76 12 33 99 18 92
35 74 0 95 71 39
33 39 32 37 45 57
71 95 5 71 24 86
8 51 54 74 24 75
70 33 63 29 99 0
答案是1382 为嘛我的是1100