http://acm.hdu.edu.cn/showproblem.php?pid=2391
一路逆着推过去
View Code
#include <stdio.h> #include <string.h> const int INF=100000000; int map[1001][1001],dp[1001][1001]; int Max(int a,int b,int c) { int max=-INF; if(a>max)max=a; if(b>max)max=b; if(c>max)max=c; return max; } int main() { int t; scanf("%d",&t); for(int cas=1;cas<=t;cas++) { int r,c; scanf("%d%d",&r,&c); for(int i=0;i<r;i++) for(int j=0;j<c;j++) { scanf("%d",&map[i][j]); dp[i][j]=map[i][j]; } for(int i=r-1;i>=0;i--) for(int j=c-1;j>=0;j--) dp[i][j]=Max(dp[i][j+1],dp[i+1][j+1],dp[i+1][j])+map[i][j]; printf("Scenario #%d:\n",cas); printf("%d\n\n",dp[0][0]); } return 0; }