题目描述

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

输入

第一行是一个整数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. Javascript单线程实现
  2. PHP的Session机制
  3. aliyun maven 添加jar_gradle添加阿里云maven库
  4. Qt文档阅读笔记-编写应用脚本解析与实例
  5. opencv配置中常见问题
  6. oracle 错误代码问题处理经验汇总
  7. EXT2文件系统简介
  8. JAVA中SSH框架
  9. git 强制回滚到某个commit版本
  10. 冰蝎各版本工具分析与魔改思路
  11. Spring Boot普通参数与基本注解
  12. 三年磨一剑大话数据结构——数据结构起源、概念和术语
  13. 韦根w34是多少位_Levi's裤子尺码中的W34和L34各是多少厘米?
  14. 记忆化搜索 (蒟蒻练习生)
  15. 创业公司如何划分股份
  16. NE555使用的一些心得
  17. Android 圆形图片 CircleImageView(Xfermode方式)
  18. 与iOS的初吻---方法命名与调用
  19. CTF网络安全大赛 Crypto boom
  20. 19年计算机英语统考,抓紧!2019年上半年全国计算机等级考试、全国英语等级考试报名即将截止...

热门文章

  1. 织梦网站翻页php,dedecms织梦网站列表页和内容页分页样式
  2. [转]5分钟实现Android中更换头像功能
  3. [转]浅谈CMD和win powershell的区别
  4. C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
  5. Android系统手机端抓包方法(tcpdump)
  6. C# 实现Winform全屏后不遮挡任务栏,显示任务栏
  7. linux重新做yum,Linux 系统 Centos 7.7 下重装yum
  8. linux系统多网口聚合配置,Linux网卡聚合linux多网卡绑定聚合之bond模式的原理是什么...
  9. springboot springcloud区别_SpringCloud微服务全家桶-第一篇!为什么要用微服务
  10. 一所传闻要被“降级”的211高校,让这位网红教授“救活了”