标签:
题目链接:
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