5454
5555这道题乍一看很复杂,我们不妨从几个简单的例子入手,尝试打开思路。
5656
57- 假如有 2 个鸡蛋,6 层楼。 我们应该先从哪层楼开始扔呢?想了一会,没有什么好的办法。我们来考虑使用暴力的手段 。
57+ 为了方便描述,我将 f(i, j) 表示有 i 个鸡蛋, j 层楼,在最坏情况下,最少的次数 。
5858
59- ![ ] ( https://p.ipic.vip/120oh0.jpg )
60- (图 1. 这种思路是不对的)
59+ 假如有 2 个鸡蛋,6 层楼。 我们应该先从哪层楼开始扔呢?想了一会,没有什么好的办法。我们来考虑使用暴力的手段。
6160
6261既然我不知道先从哪层楼开始扔是最优的,那我就依次模拟从第 1,第 2。。。第 6 层扔。每一层楼丢鸡蛋,都有两种可能,碎或者不碎。由于是最坏的情况,因此我们需要模拟两种情况,并取两种情况中的扔次数的较大值(较大值就是最坏情况)。 然后我们从六种扔法中选择最少次数的即可。
6362
6463![ ] ( https://p.ipic.vip/5vz4r2.jpg )
65- (图 2. 应该是这样的 )
64+ (图1 )
6665
67- 而每一次选择从第几层楼扔之后,剩下的问题似乎是一个规模变小的同样问题。嗯哼?递归?
68-
69- 为了方便描述,我将 f(i, j) 表示有 i 个鸡蛋, j 层楼,在最坏情况下,最少的次数。
66+ 而每一次选择从第几层楼扔之后,剩下的问题似乎是一个规模变小的同样问题。比如选择从 i 楼扔,如果碎了,我们需要的答案就是 1 + f(k-1, i-1),如果没有碎,需要在找 [ i+1, n] ,这其实等价于在 [ 1,n-i] 中找。我们发现可以将问题转化为规模更小的子问题,因此不难想到递归来解决。
7067
7168伪代码:
7269
@@ -98,9 +95,9 @@ class Solution:
9895 return ans
9996```
10097
101- 可是如何这就结束的话,这道题也不能是 hard,而且这道题是公认难度较大的 hard 之一。
98+ 可是如何这就结束的话,这道题也不能是 hard,而且这道题是公认难度较大的 hard 之一,肯定不会被这么轻松解决 。
10299
103- 上面的代码会 TLE,我们尝试使用记忆化递归来试一下,看能不能 AC。
100+ 实际上上面的代码会 TLE,我们尝试使用记忆化递归来试一下,看能不能 AC。
104101
105102``` py
106103
@@ -121,19 +118,19 @@ class Solution:
121118那只好 bottom-up(动态规划)啦。
122119
123120![ ] ( https://p.ipic.vip/gnmqq1.jpg )
124- (图 3 )
121+ (图 2 )
125122
126123我将上面的过程简写成如下形式:
127124
128125![ ] ( https://p.ipic.vip/m4ruew.jpg )
129- (图 4 )
126+ (图 3 )
130127
131128与其递归地进行这个过程,我们可以使用迭代的方式。 相比于上面的递归式,减少了栈开销。然而两者有着很多的相似之处。
132129
133130如果说递归是用函数调用来模拟所有情况, 那么动态规划就是用表来模拟。我们知道所有的情况,无非就是 N 和 K 的所有组合,我们怎么去枚举 K 和 N 的所有组合? 当然是套两层循环啦!
134131
135132![ ] ( https://p.ipic.vip/o91aox.jpg )
136- (图 5 . 递归 vs 迭代)
133+ (图 4 . 递归 vs 迭代)
137134
138135如上,你将 dp[ i] [ j ] 看成 superEggDrop(i, j),是不是和递归是一摸一样?
139136
@@ -177,6 +174,7 @@ class Solution:
177174总结一下,上面的解题方法思路是:
178175
179176![ ] ( https://p.ipic.vip/ynsszu.jpg )
177+ (图 5)
180178
181179然而这样还是不能 AC。这正是这道题困难的地方。 ** 一道题目往往有不止一种状态转移方程,而不同的状态转移方程往往性能是不同的。**
182180
@@ -185,6 +183,7 @@ class Solution:
185183把思路逆转!
186184
187185![ ] ( https://p.ipic.vip/jtgl7i.jpg )
186+ (图 6)
188187
189188> 这是《逆转裁判》 中经典的台词, 主角在深处绝境的时候,会突然冒出这句话,从而逆转思维,寻求突破口。
190189
0 commit comments