题目描述

有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

输入

第一行是一个整数N(1 <= N <= 20),表示数塔的高度,接下来用N个数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。

输出

输出可能得到的最大和,每个实例的输出占一行。

样例输入

5
9 12 15 10 6 8 2 18 9 5 19 7 10 4 16

样例输出

max=59

题目分析:
我们可以看出来,这道题目如果使用贪心算法不能保证找到真正的最大和。
所以我们在选择用动态规划的时候,考虑数塔问题时可以自上向下的分析,自底向上的计算。

算法实现:首先利用一个二维数组a[100][100]存储数塔的原始数据(只用下三角形矩阵),然后利用一个中间数组f[100][100]存储每一次决策过程中的结果(也是一个下三角矩阵)。
初始化f数组,先将a数组的最后一层拷贝到f中。接下来,再让f数组的每一层等于f数组下一层中两个数中最大的数,代码为:f[i][j] = max(f[i+1][j], f[i+1][j+1]) + a[i][j],最后我们想要的结果就保存在f[0][0]中。
对于上面的数塔,我们的a数组如下:

9        
12 15      
10 6 8    
2 18 9 5  
19 7 10 4 16

f数组如下

59        
50 49      
38 34 29    
21 28 19 21  
19 7 10 4 16

完整代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){int a[100][100],f[100][100];int n,i,j;cin>>n;for(i=1;i<=n;i++){for(j=1;j<=i;j++){cin>>a[i][j];}}for(i=n;i>=1;i--){for(j=1;j<=i;j++){f[i][j] = max(f[i+1][j],f[i+1][j+1])+a[i][j];}}cout<<"max="<<f[1][1];
}

问题 B: 数塔问题相关推荐

  1. HDU 2084 数塔(DP)(JAVA版)

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

  2. HDU-2084 数塔 经典dp,水

    1.HDU-2084   数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为  dp[i][j] ...

  3. HDOJ_ACM_数塔

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

  4. HDU -- 2084 数塔(简单DP)

    HDU -- 2084  数塔 题意: 自上而下,选择一条累计和最大的路径 分析: 顶点只与左右两个子节点相关,且子节点路径的选择与顶点无关(无后效性) 状态dp[i][j]:表示(i,j)点向下得到 ...

  5. HDU 2084 数塔 DP

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目: 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走 ...

  6. 数塔(杭电2084)

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

  7. c++ 动态规划(数塔)

    c++ 动态规划(dp) 题目描述 观察下面的数塔.写一个程序查找从最高点到底部任意位置结束的路径,使路径经过数字的和最大. 每一步可以从当前点走到左下角的点,也可以到达右下角的点. 输入 5 13 ...

  8. HD 2048 数塔 DP(简单递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...

  9. 动态规划入门_数塔问题

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

  10. hdu 1176 dp 数塔问题

    哎,一开始没看到从5开始.... 后来写懵了,用了queue正推,记录能到达的节点,p[i+1][j] = max(p[i][j],max(p[i][j-1],p[i][j+1])) 嗯,用stl m ...

最新文章

  1. 你应该如何选择笔记软件?
  2. SwiftUI 3.0调用SDWebImageSwiftUI 第三方框架
  3. HDU1753: 大明A+B
  4. 字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串
  5. linux用户组chownd,Linux系统centos6下用户与用户组权限命令用法 chmod与chown
  6. C语言课后习题(34)
  7. ThinkPHP之add、save无法添加、修改的解决方案
  8. 滚动后mouseleave失效_滚动直线导轨副用钳制器可靠性试验设计
  9. 矩阵理论(三)向量矩阵的求导
  10. 鸿蒙系统摩尔纹怎么去,PS摩尔纹如何消除?摩尔纹消除方法图文分享
  11. scara机器人运动学正逆解
  12. python计算等额本息还款房贷_[Python]等额本息房贷计算器
  13. 前端清除缓存的集中方法
  14. 计算机硬件希沃课件,希沃课件怎么转为ppt?
  15. Windows10专业版系统镜镜像
  16. maskrcnn训练问题报错:selected_polygons.append(self.polygons[i]) IndexError: list index out of range
  17. Windows 日志安全审核
  18. Linux发行版制作总结
  19. 多级列表为“第一章”下产生含“阿拉伯数字章节号”的题注(word题注自定义)
  20. Java创建对象过程:类的初始化和实例化

热门文章

  1. RAML用户应遵循的C#与Web API代码生成模式
  2. python 读取json为list及向json文件追加数据
  3. ArcGIS 10.7 模型构建器Model Builder空间建模流程化作业案例----影像拼接与掩膜裁剪
  4. IOS之学习笔记六(可变形参)
  5. Android之Launcher分析和修改1——Launcher默认界面配置(default_workspace)
  6. 【前端就业课 第一阶段】HTML5 零基础到实战(九)列表
  7. 七、功能性组件与事件逻辑(IVX 快速开发教程)
  8. java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum
  9. knex 单表查询_knex.js
  10. 影子的变化情况到底如何?和太阳又有什么关系?