在上一篇漫画中,我们分析了一道动态规划相关的算法问题,并归纳出了问题的状态转移方程式。没看过上一篇的朋友可以点击下面的链接:

漫画说算法–动态规划算法一(绝对通俗易懂,非常棒)


首先,让我们简单回顾一下题目:

有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。

以动态规划的建模思路,我们归纳出的状态转移方程式如下:

F(1) = 1;
F(2) = 2;
F(n) = F(n-1)+F(n-2)(n>=3)

下面,继续我们的故事。


方法一:递归求解

由于代码比较简单,这里就不做过多解释了。

如图所示,相同的颜色代表了方法被传入相同的参数。

方法二:备忘录算法

在以上代码中,集合map是一个备忘录。当每次需要计算F(N)的时候,会首先从map中寻找匹配元素。如果map中存在,就直接返回结果,如果map中不存在,就计算出结果,存入备忘录中。

方法三:动态规划求解

程序从 i=3 开始迭代,一直到 i=n 结束。每一次迭代,都会计算出多一级台阶的走法数量。迭代过程中只需保留两个临时变量a和b,分别代表了上一次和上上次迭代的结果。 为了便于理解,我引入了temp变量。temp代表了当前迭代的结果值。


题目二: 国王和金矿

有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同,而工人的总数是1000人。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)相关推荐

  1. 漫画说算法--动态规划算法三(绝对通俗易懂,非常棒)

    在前两集漫画中,我们通过一个算法问题的完整解题过程,讲述了动态规划的基本概念和思想.没看过前两集的朋友可以点击下面的链接: 漫画说算法–动态规划算法一(绝对通俗易懂,非常棒) 漫画说算法–动态规划算法 ...

  2. 菜鸟学算法——动态规划(二)

    概述 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法,它是应用数学中用于解决某类最优化问题的重要工具.20世纪 ...

  3. 五大常用算法——动态规划算法详解及经典例题

    一.基本概念 动态规划是运筹学中用于求解决策过程中的最优化数学方法.当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法. 动态规划过程是:每次决策依赖于当前状态,又 ...

  4. 算法-动态规划算法(详解)

    动态规划算法介绍 1)动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法 2)动态规划算法与分治算法类似,其基本思想也是将 ...

  5. 算法-动态规划算法总结

    1 基础问题 // 509. 斐波那契数 // 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.// dp[i]的 ...

  6. 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

    矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...

  7. 算法——动态规划算法

    动态规划法基本思想:将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解. 著名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等. 个人对动态规划的理解,主要就是避免 ...

  8. 算法——动态规划算法求解字符串的编辑距离

    当有人让你用递归算法求解斐波那契数列以及字符串的编辑距离时,所设的陷阱都是一致的(递归调用时的重复计算),解决方案也是一致的(引入备忘录概念).观察树形的层级调用关系,我们可以发现动态规划隐式地嵌入了 ...

  9. 漫画说算法--动态规划算法一(绝对通俗易懂,非常棒)

    题目: 有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.要求用程序来求出一共有多少种走法. 比如,每次走1级台阶,一共走10步,这是其中一种走法.我们可以简写成 1,1,1 ...

最新文章

  1. Docker Toolbox Looks like something went wrong
  2. 了解JavaScript核心精髓(三)
  3. pc安装linux内核,PC/104平台嵌入式Linux系统核心定制方法
  4. electron增加导航按钮_Electron发布6.0 Released版本
  5. 一份所有中国人都应该听的歌单,你听过几首?
  6. python中int和eval的区别_python中eval与int的区别浅析
  7. 深度linux内核升级,深度操作系统 2020.11.11 更新发布:内核升级
  8. elasticsearch实现远程索引复制
  9. 补习系列(13)-springboot redis 与发布订阅
  10. 关于gcc -o 的使用问题
  11. jQuery 开始动画,停止动画
  12. HTML实现简易音乐网站
  13. excel多元线性拟合_excel透视+多元线性回归
  14. 【Java从0到架构师】学习记录
  15. Postgresql杂谈 04—Postgresql中的五种常规索引
  16. 系统架构设计——伸缩性架构
  17. 全球与中国终末期肾病(ESRD)设备市场现状及未来发展趋势(2022)
  18. java启动器_打造java启动器步骤三
  19. RxJava2基础总结(二)
  20. 【SymbolicLink】利用软连接将已安装程序搬迁到其他盘符

热门文章

  1. ST17H26 SDK中宏定义注意事项
  2. 聚类算法(1):K-Means算法
  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)成员模板
  4. (chap6 Http首部) 响应首部字段 AllowCt-EncodingCt-LanguageCt-LengthCt-Location
  5. 差分能量分析介绍(四)
  6. 部署 JSP 工程文件
  7. optee中的密码学算法注册模型
  8. Android Makefile编译流程
  9. 命令行编译 WRK ,windbg 调试
  10. (39)通过 PID 获取 EPROCESS