#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define max(a,b) (((a) > (b)) ? (a) : (b))
using namespace std;
long long int dp[61][61][61][61], map[61][61];
int main(){
int m,n;
scanf("%d%d",&m, &n);
int x1,y1,x2,y2;
for(int i = 1;i <= m;i++){
for(int j = 1;j <= n;j++){
scanf("%lld",&(map[i][j]));
}
}
for(x1 = 1;x1 <= m;x1++){
for(y1 = 1;y1 <= n;y1++){
for(x2 = 1;x2 <= m;x2++){
y2 = x1 + y1 - x2;
if(x1 == x2 && y1 == y2){
dp[x1][y1][x2][y2] = map[x1][y1];
}else{
dp[x1][y1][x2][y2] = map[x1][y1] + map[x2][y2];
}
dp[x1][y1][x2][y2] += max(dp[x1][y1 - 1][x2][y2 - 1],
max(dp[x1][y1 - 1][x2 - 1][y2],
max(dp[x1 - 1][y1][x2][y2 - 1],
dp[x1 - 1][y1][x2 - 1][y2])));
}
}
}
printf("%lld\n",dp[m][n][m][n]);
}
莫名其妙的测试点错误。我交了好几次,第一次数组大小51,挂了个点。我百思不得其解抱着试一试的心态加到了61个点结果莫名其妙又过了四个点。剩下的一个究竟是为什么没过呢(发出萌新的疑问)。(还有这是不是说明了题目里给的什么100%数据小于50是骗人的>_<