什么是动态规划?(二)

简介: 什么是动态规划?(二)

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


漫画:什么是动态规划?


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


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


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


F(1) = 1;

F(2) = 2;

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


下面,继续我们的故事。

微信图片_20220421113229.jpg微信图片_20220421113231.jpg微信图片_20220421113233.jpg微信图片_20220421113236.jpg微信图片_20220421113239.jpg微信图片_20220421113241.jpg微信图片_20220421113243.jpg微信图片_20220421113245.jpg微信图片_20220421113247.jpg微信图片_20220421113249.jpg微信图片_20220421113251.jpg微信图片_20220421113254.jpg微信图片_20220421113256.jpg微信图片_20220421113259.jpg微信图片_20220421113301.jpg微信图片_20220421113303.jpg


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

微信图片_20220421113347.jpg微信图片_20220421113349.jpg微信图片_20220421113352.jpg

方法二:备忘录算法


微信图片_20220421113355.jpg


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

微信图片_20220421113357.jpg微信图片_20220421113359.jpg微信图片_20220421113402.jpg微信图片_20220421113404.jpg微信图片_20220421113406.jpg微信图片_20220421113409.jpg微信图片_20220421113411.jpg微信图片_20220421113415.jpg微信图片_20220421113417.jpg微信图片_20220421113419.jpg微信图片_20220421113421.jpg微信图片_20220421113425.jpg微信图片_20220421113428.jpg微信图片_20220421113430.jpg微信图片_20220421113432.jpg微信图片_20220421113434.jpg微信图片_20220421113437.jpg微信图片_20220421113439.jpg微信图片_20220421113442.jpg微信图片_20220421113444.jpg微信图片_20220421113446.jpg微信图片_20220421113448.jpg

方法三:动态规划求解


微信图片_20220421113450.jpg

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


微信图片_20220421113454.jpg微信图片_20220421113456.jpg微信图片_20220421113458.jpg微信图片_20220421113501.jpg微信图片_20220421113503.jpg微信图片_20220421113506.jpg微信图片_20220421113508.jpg

题目二: 国王和金矿


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

微信图片_20220421113510.jpg微信图片_20220421113518.jpg

相关文章
|
6月前
|
C++ NoSQL 容器
动态规划三
动态规划三
|
算法
【学会动态规划】按摩师(11)
【学会动态规划】按摩师(11)
53 0
|
6月前
|
存储 JavaScript 机器人
动态规划问题
动态规划问题
41 0
|
6月前
动态规划1
动态规划1
36 0
动态规划1
|
6月前
动态规划
动态规划
53 0
|
机器学习/深度学习 算法
动态规划详解
前段时间一直在做关于数据结构的题,也算是对数据结构有了一定的了解,知道了有些数据结构的基本算法。现在刚刚开始接触动态规划,其实写这篇文章的初衷是一来锻炼一下自己的总结能力,二来也是希望通过这篇文章,来指引和我一样的初学者,废话不多说了,开始吧。
56 0
|
定位技术
动态规划题:夺宝奇兵
动态规划题:夺宝奇兵
88 0
|
人工智能
动态规划的证明题
动态规划的证明题
108 0
动态规划-子序列问题
前言 在上篇文章我们学习了动态规划的公共子序列问题,现在我们来学习下动态规划的单字符串子序列问题。