问题 B: 数塔问题
题目描述
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
输入
第一行是一个整数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: 数塔问题相关推荐
- HDU 2084 数塔(DP)(JAVA版)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU-2084 数塔 经典dp,水
1.HDU-2084 数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为 dp[i][j] ...
- HDOJ_ACM_数塔
Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大 ...
- HDU -- 2084 数塔(简单DP)
HDU -- 2084 数塔 题意: 自上而下,选择一条累计和最大的路径 分析: 顶点只与左右两个子节点相关,且子节点路径的选择与顶点无关(无后效性) 状态dp[i][j]:表示(i,j)点向下得到 ...
- HDU 2084 数塔 DP
http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目: 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走 ...
- 数塔(杭电2084)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- c++ 动态规划(数塔)
c++ 动态规划(dp) 题目描述 观察下面的数塔.写一个程序查找从最高点到底部任意位置结束的路径,使路径经过数字的和最大. 每一步可以从当前点走到左下角的点,也可以到达右下角的点. 输入 5 13 ...
- HD 2048 数塔 DP(简单递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...
- 动态规划入门_数塔问题
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP ...
- hdu 1176 dp 数塔问题
哎,一开始没看到从5开始.... 后来写懵了,用了queue正推,记录能到达的节点,p[i+1][j] = max(p[i][j],max(p[i][j-1],p[i][j+1])) 嗯,用stl m ...
最新文章
- 你应该如何选择笔记软件?
- SwiftUI 3.0调用SDWebImageSwiftUI 第三方框架
- HDU1753: 大明A+B
- 字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串
- linux用户组chownd,Linux系统centos6下用户与用户组权限命令用法 chmod与chown
- C语言课后习题(34)
- ThinkPHP之add、save无法添加、修改的解决方案
- 滚动后mouseleave失效_滚动直线导轨副用钳制器可靠性试验设计
- 矩阵理论(三)向量矩阵的求导
- 鸿蒙系统摩尔纹怎么去,PS摩尔纹如何消除?摩尔纹消除方法图文分享
- scara机器人运动学正逆解
- python计算等额本息还款房贷_[Python]等额本息房贷计算器
- 前端清除缓存的集中方法
- 计算机硬件希沃课件,希沃课件怎么转为ppt?
- Windows10专业版系统镜镜像
- maskrcnn训练问题报错:selected_polygons.append(self.polygons[i]) IndexError: list index out of range
- Windows 日志安全审核
- Linux发行版制作总结
- 多级列表为“第一章”下产生含“阿拉伯数字章节号”的题注(word题注自定义)
- Java创建对象过程:类的初始化和实例化
热门文章
- RAML用户应遵循的C#与Web API代码生成模式
- python 读取json为list及向json文件追加数据
- ArcGIS 10.7 模型构建器Model Builder空间建模流程化作业案例----影像拼接与掩膜裁剪
- IOS之学习笔记六(可变形参)
- Android之Launcher分析和修改1——Launcher默认界面配置(default_workspace)
- 【前端就业课 第一阶段】HTML5 零基础到实战(九)列表
- 七、功能性组件与事件逻辑(IVX 快速开发教程)
- java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum
- knex 单表查询_knex.js
- 影子的变化情况到底如何?和太阳又有什么关系?