现在,我们稍微修改 dp 数组的定义,确定当前的鸡蛋个数和最多允许的扔鸡蛋次数,就知道能够确定 F 的最⾼楼层数。具体来说是这个意思: dp[k][m]=n#当前有k个鸡蛋,可以尝试扔m次鸡蛋#这个状态下,最坏情况下最多能确切测试⼀栋n层的楼#⽐如说dp[1][7]=7表⽰:#现在有1个鸡蛋,允许你扔7次;#这个...
我们选择在第i层楼扔了鸡蛋之后,可能出现两种情况:鸡蛋碎了,鸡蛋没碎。注意,这时候状态转移就来了: 如果鸡蛋碎了,那么鸡蛋的个数K应该减一,搜索的楼层区间应该从[1..N]变为[1..i-1]共i-1层楼; 如果鸡蛋没碎,那么鸡蛋的个数K不变,搜索的楼层区间应该从[1..N]变为[i+1..N]共N-i层楼。 PS:细...
首先我们根据dp(K, N)数组的定义(有K个鸡蛋面对N层楼,最少需要扔 dp(K, N) 次),很容易知道K固定时,这个函数随着N的增加一定是单调递增的,无论你策略多聪明,楼层增加的话,测试次数一定要增加。 那么注意dp(K - 1, i - 1)和dp(K, N - i)这两个函数,其中i是从 1 到N单增的,如果我们固定K和N...
res = min(res, 在第i层扔鸡蛋) return res 1. 2. 3. 4. 5. 6. 7. 状态转移:在第i层扔鸡蛋,可能会出现两种情况引起状态转移 鸡蛋碎了:鸡蛋的个数k减1,搜索的楼层区间从[1,…,N]变为[1,…,i-1].楼层数为i-1 鸡蛋未碎:鸡蛋的个数k不变,搜索的楼层区间从[1,…,N]变为[i+1,…,N]....
动态规划问题:高楼扔鸡蛋 力扣887 题 难度:困难 思路分析: 题目是这样: 你面前有一栋从 1 到N共N层的楼,然后给你K个鸡蛋(K至少为 1)。现在确定这栋楼存在楼层0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎(高于F的楼层都会碎,低于F的楼层都不会碎)。现在问你,最坏情况下,你至少要扔几次鸡...
下面就来用我们一直强调的动态规划通用思路来研究一下这道题。 一、解析题目 题目是这样:你面前有一栋从 1 到N共N层的楼,然后给你K个鸡蛋(K至少为 1)。现在确定这栋楼存在楼层0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎(高于F的楼层都会碎,低于F的楼层都不会碎)。现在问你,最坏情况下,你...
状态:鸡蛋数量和楼层高度。 选择:鸡蛋是否破裂。 状态转移方程: 情况有两种: 1.当前楼层鸡蛋如果破裂,那么应该从下面一层接着测试,即broken = dp(k-1,n-1)。 2.当前楼层鸡蛋如果没有破裂,那么应该从上面一层接着测试,即not_broken = dp(k,n-mid)。
方法一:动态规划 分析 边界条件 状态转移 代码实现 复杂度 方法二:动态规划 + 二分搜索 分析 代码实现 复杂度 高楼扔鸡蛋 这是一个比较经典的动态规划问题,最先来自谷歌的面试题。 题目 887. 鸡蛋掉落 方法一:动态规划 分析 我们假设 g(k,n) 表示当有 k 枚鸡蛋,楼层数为 n 时,找到临界楼层 F 所需要的...
下面就来用我们一直强调的动态规划通用思路来研究一下这道题。 一、解析题目 题目是这样:你面前有一栋从 1 到N共N层的楼,然后给你K个鸡蛋(K至少为 1)。现在确定这栋楼存在楼层0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎(高于F的楼层都会碎,低于F的楼层都不会碎)。现在问你,最坏情况下,你...
下面就来用我们一直强调的动态规划通用思路来研究一下这道题。 一、解析题目 题目是这样:你面前有一栋从 1 到N共N层的楼,然后给你K个鸡蛋(K至少为 1)。现在确定这栋楼存在楼层0 <= F <= N,在这层楼将鸡蛋扔下去,鸡蛋恰好没摔碎(高于F的楼层都会碎,低于F的楼层都不会碎)。现在问你,最坏情况下,你...