hdoj2084 数塔

原创 2016年03月23日 01:17:00

题解:

DP的经典题目之一,从塔的最底层一直往上走,到达顶部后途中累加的和最大的就是所要求的值。在这里,可以设置二维数组dp[i][j],表示“走到第i层、第j个元素时可以获得的最大值”。这里有两个关键的地方:

  • 考虑的对象是“走到了某个位置”,而不是“从某个位置开始走”。这也是DP比如背包问题里面的一个重要思想。这样的话,状态转移方程就是:
dp[i][j] += max(dp[i+1][j], dp[i+1][j+1])
  • 因为从塔的结构来说是斜的,但是从二维数组来说,上述方程只是取了下方和右下方的较大的值,所以要给第2维多留一个空间,里面的值初始化为0,否则会出现数组越界。


代码(156MS, 1836K):

#include <iostream>
#include <fstream>
#include <cstring>      // memset
#include <algorithm>    // max
using namespace std;

const int maxn(101);
int dp[maxn][maxn];

int main() {
//  ifstream cin("in.txt");
    int casenum;
    cin >> casenum;
    while (casenum--) {
        memset(dp, 0, sizeof dp);
        int depth;
        cin >> depth;
        for (int i = 1; i <= depth; ++i) {
            for (int j = 1; j <= i; ++j) {
                cin >> dp[i][j];
            }
        }

        for (int i = depth - 1; i >= 1; --i) {
            for (int j = 1; j <= i; ++j) {
                dp[i][j] += max(dp[i + 1][j], dp[i + 1][j + 1]);
            }
        }
        cout << dp[1][1] << endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HDOJ 2084 数塔(动规)(水)

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss...

HDOJ 2084 数塔

数塔 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过...

HDOJ 2084 数塔

题目叙述:   在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? ...

hdoj2084 数塔 (DP水题)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Problem Description 在讲述DP算法的时候,一个经...

HDOJ 2084 数塔

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi...

HDOJ_2084:数塔 解题报告

要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 初始条件其实就是最底层的数值,递推关系是某一节点数值=自身数值+左右子节点数值的较大值。 看到有的人的代码是用二...

HDoj-2084-数塔-dp

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi...

动态规划-数塔问题(HDOJ-2084)

动态规划(dynamic programming)网上大家都简称为DP。DP的核心思想就是找出各阶段各子问题之间的关系,然后利用各阶段的关系逐个求解。其中比较经典的题目就是数塔和最长有序子序列的求解。...

HDU - 2084 数塔(dp入门)

数塔 Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:  有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经...

HDU 2084 数塔

Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)