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

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

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


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

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

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

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

下面,继续我们的故事。


漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第1张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第2张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第3张图片

方法一:递归求解

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第4张图片

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

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第5张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第6张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第7张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第8张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第9张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第10张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第11张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第12张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第13张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第14张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第15张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第16张图片

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

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第17张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第18张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第19张图片

方法二:备忘录算法

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第20张图片

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

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第21张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第22张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第23张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第24张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第25张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第26张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第27张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第28张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第29张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第30张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第31张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第32张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第33张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第34张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第35张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第36张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第37张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第38张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第39张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第40张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第41张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第42张图片

方法三:动态规划求解

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第43张图片

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

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第44张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第45张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第46张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第47张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第48张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第49张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第50张图片


题目二: 国王和金矿

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

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第51张图片

漫画说算法--动态规划算法二(绝对通俗易懂,非常棒)_第52张图片

你可能感兴趣的:(TCB-算法,漫画说算法)