码迷,mamicode.com
首页 > 其他好文 > 详细

HDU2391 Filthy Rich【数塔DP】

时间:2015-03-30 13:25:00      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

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;
}


HDU2391 Filthy Rich【数塔DP】

标签:

原文地址:http://blog.csdn.net/lianai911/article/details/44748671

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!