标签:
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2391
题目大意:
在一个N*M的矩阵中,不同的位置上有不同重量的黄金,从矩阵的左上角开始,只能向右
或是向下走,问:从左上角走到右下角最多能获得多少黄金。
思路:
简单的数塔DP,状态转移方程:dp[j] = max(dp[j-1],dp[j])+ Map[i][j]。
AC代码:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int Map[1100][1100],dp[1100],N,M; int main() { int T,kase = 0; scanf("%d",&T); while(T--) { scanf("%d%d",&N,&M); for(int i = 1; i <= N; ++i) { for(int j = 1; j <= M; ++j) { scanf("%d",&Map[i][j]); } } for(int i = 1; i <= N; ++i) { for(int j = 1; j <= M; ++j) { if(i == 1) dp[j] = dp[j-1] + Map[i][j]; else dp[j] = max(dp[j-1],dp[j])+ Map[i][j]; } } printf("Scenario #%d:\n",++kase); printf("%d\n\n",dp[M]); } return 0; }
标签:
原文地址:http://blog.csdn.net/lianai911/article/details/44748671