题目链接:
?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];elsedp[j] = max(dp[j-1],dp[j])+ Map[i][j];}}printf("Scenario #%d:\n",++kase);printf("%d\n\n",dp[M]);}return 0;}
当眼泪流尽的时候,留下的应该是坚强。