这个题跟方格取数是一样的额,不过是改成了从头到尾和从尾到头的两条路径,其实还是一样的。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,x,y,v,ans,m;
int sum=0;
int s[60][60];
int f[51][51][51][51];//定义这个四维的数组两条路径的数值和
int main()
{
scanf("%d%d",&m,&n);
for(int i = 1; i <= m; i ++)
{
for(int j = 1; j <= n; j ++)
scanf("%d",&s[i][j]);
}
for(int i = 1; i <= m; i ++)
for(int j = 1; j <= n; j ++)
for(int k = 1; k <= m; k ++)
for(int l = 1; l <= n; l ++)
{
sum = s[i][j] + max(max(f[i-1][j][k][l-1],f[i-1][j][k-1][l]),max(f[i][j-1][k][l-1],f[i][j-1][k-1][l]));//两条路的转移路径
if(i == k && j == l)//如果两条路走到了一个点,结果只加一次
f[i][j][k][l] += sum;
else
f[i][j][k][l] += sum+s[k][l];//否则的话加上另一条路的值
}
cout <<f[m][n][m][n];
return 0;
}