问题描述:

小明在某个角落发现了一座由数字组成的斜塔,他I想到塔顶去看看。小明可以从底层任意一个数字出发逐层爬上去,每次可以爬至上一层数字上或者上一层左边相邻的数字上(第1列只能爬至正上方上一层的数字上)。
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5
如上图,小明如果从最下层也就是第5层的数字4向上爬,只能爬到上一层即第4层的2号数字上;如果从数字2爬,可以爬到其正上方的数字4上,也可以爬到数字7上;如果从最右边的数字5爬,则只能爬到其左上方的数字4上。

现在小明想知道,他从最下层开始爬到塔顶,如何选择爬上去的路径,使该路径经过的数字和最大?

输入:

多组测试数据。
每组测试数据的第一行是一个整数n(1≤n≤100)表示数塔的高度,接下来用n行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。

输出:

对于每个组测试数据,输出一个整数表示得到的最大和,每个输出占一行。

样例输入:

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出:

30

————————————————————————————————————

由于每个位置的数字是随机的,所以大概没有一个固定的路线来求得最大值,这意味着我们要把所有路线都走一遍,但如果把每条路线独立出来算,会造成大量的重复计算,如走5-4-0-8-7中的4-0-8-7会在6-4-0-8-7中又一遍计算,如果塔的层数很大时,重复计算量是非常大的,因此我们要想办法记录已经进行过的计算。

我们可以观察到,越在上层的数字被重复计算的次数越多,所以我们要优先记录上层,才能保证最大化减少计算量。

那我们要记录上面呢?我们最终要得到的是路径数字最大和,那我们应该记录从某个位置爬塔能得到的最大数字和,一旦得到这个,下一层的就完全可以只依靠上层记录的值就得到它能达到的最大值,而无需爬到最顶层。

这就是思路,接下来是敲代码了。

#include <stdio.h>
int arr[100][100];  //创建二维数组用来记录每个位置能达到的最大值
void getsum(int);   //个人习惯用函数来处理
int main()
{int n;while(scanf("%d",&n)!=EOF){getsum(n);}}void getsum(n)
{//将数塔输入数组for(int i=0;i<n;i++){for(int j=0;j<=i;j++){scanf("%d",&arr[i][j]);}}//开始从上往下计算每个位置能达到的最大值for(int i=1;i<n;i++){arr[i][0]+=arr[i-1][0];for(int j=1;j<i;j++){arr[i][j]+=(arr[i-1][j]>arr[i-1][j-1]?arr[i-1][j]:arr[i-1][j-1]);}arr[i][i]+=arr[i-1][i-1];}//检测最底层每个位置能够到达的最大值,来得到整个塔能得到的最大值int sum=arr[n-1][0];for(int i=1;i<n;i++){sum=arr[n-1][i]>sum?arr[n-1][i]:sum;}//将结果输出printf("%d\n",sum);
}

这是一道较为简单的动态规划题,适合新手对动态规划进行理解。

C简单动态规划——爬数塔相关推荐

  1. 算法.动态规划 导航/数塔取数字问题

    目录 前言 从1+1开始 总结下概念 地图到图 回头看 代码 动态规划经典问题 前言 下面的概念和公式可能会吓到你,看不懂没关系,就是让你恶心的.反正我看着也挺恶心,专业就是让你看不懂,看懂了怎么能叫 ...

  2. 算法学习(动态规划)- 数塔问题

    前言 之前碰到了扔鸡蛋问题(给你2个鸡蛋,在100层楼上扔,要求想出一个好的策略,去测出哪一层楼开始鸡蛋就会碎掉),一直摸不着头脑.后来才知道可以使用"动态规划"这种思想(或者叫算 ...

  3. c语言动态规划算法数塔问题,动态规划之数塔问题...

    这么简单的DP问题就不要再讲了吧...无奈楼翰诚大佬的数塔问题是在没讲清楚,也只好自己写一个... 数塔问题嘛...已经有很多大佬讲过了,比如这位令人熟悉的大佬 BUT! 实际上关于这种从下往上的DP ...

  4. 动态规划2(数塔问题)

    数塔问题是二维情况下动态规划的经典问题,下面以洛谷的一个例题来分析数塔问题以及动态规划:原题链接 题目描述 观察下面的数字金字塔.写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大 ...

  5. 杭电ACM 动态规划 1 数塔

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

  6. python 动态规划 数塔_数塔问题,简单的动态规划算法

    /* 数塔问题: 9 12 15 10 6 8 2 18 9 5 19 7 10 4 16 有形如图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走, 一直走到底层,要求找出一条路径,使路径 ...

  7. 动态规划--数塔问题

    动态规划–数塔问题 今天学习了动态规划的数塔问题,老师给我们讲了三种方法. (1)第一种方法是原始的递归,就是从上往下看一个n层塔的最大路径问题可以转化为选出左右两个n-1层塔的最大路径问题的较大值, ...

  8. 算法-数塔问题-c语言

    如下图是一个数塔,从顶部出发在每一个节点可以选择向左或者向右走,一直走到底层,要求找出一条路径,使得路径上的数字之和最大. 思路分析: 在用动态规划考虑数塔问题时可以自顶向下的分析,自底向上的计算. ...

  9. c语言字母塔问题,(最新整理)数塔问题C语言

    <(最新整理)数塔问题C语言>由会员分享,可在线阅读,更多相关<(最新整理)数塔问题C语言(7页珍藏版)>请在人人文库网上搜索. 1.完整)数塔问题C语言(完整)数塔问题C语言 ...

最新文章

  1. 图灵有奖书评征集活动第001期
  2. 互联网大厂内推求职的正确姿势?
  3. 【 ML 】Steepest Descent Iteration Procedure of TOA - Based Positioning Simulation
  4. 智能合约重构社会契约(11)天德区块链智能合约系统
  5. GO编程程序员修炼秘籍:十本经典书单
  6. 一文详解,RocketMQ事务消息
  7. 证书是用来改善与增强,而不是代替? --如何让钱主动来找你?
  8. jquery梳理之常用选择器
  9. Android系统性能优化(60)---LeakCanary使用详解
  10. 如何判断一家公司靠不靠谱?
  11. 补交20145226蓝墨云班课 -- MyCP
  12. (转)HDOJ 4006 The kth great number(优先队列)
  13. 这是用过的最差树形插件
  14. PettingZoo:多智能体游戏环境库入门
  15. 模电笔记 差分放大器1
  16. PowerDesigner中pdm设置1:n,1:1,n:n的对应关系
  17. 学术英语写作(更新中)
  18. C++:从入门到放弃[3]计算
  19. Bilibili到底有多少御坂妹?(三)
  20. 最近这只狗狗,真的很忙

热门文章

  1. redmi Note12T屏幕刷新率是多少 Redmi Note12T相机怎么样 有几个摄像头
  2. ggplot2如何在R语言中绘制表格
  3. 阿里EasyExcel对Excel复杂模版填充实现并设置单元格格式
  4. 大学生上课为什么一定要认真听讲?
  5. matlab潮汐观测数据,潮汐观测方法有哪些?
  6. nginx同域名动静态分离
  7. 水星路由器wan口ip显示0_路由器wan口ip地址显示0.0.0.0怎么办(2)
  8. drm debug log with drm.debug=6 debug
  9. WinRar压缩图片捆绑EXE文件
  10. php_excel表中_如何自动将多行中文转换成拼音,Excel2007怎么批量将汉字转换为拼音...