鸡蛋掉落问题
题意
题意:给你 k k k 个鸡蛋,并可以使用一栋从第 1 1 1 层到第 n n n 层共有 n n n 层楼的建筑
已知:存在楼层 f f f , 满足 0 ≤ f ≤ n 0 \le f \le n 0≤f≤n,任何高于 f f f 的楼层落下的鸡蛋都会碎, 从 f f f 楼层或比它低的楼层,将鸡蛋掉落并不碎掉。
每次,可以取一枚鸡蛋从任意楼层 x x x 将其掉落, 1 ≤ x ≤ n 1 \le x \le n 1≤x≤n ,如果鸡蛋碎了,不能再次使用,如果鸡蛋没碎,那么可以再次使用这个鸡蛋。
需要计算并返回要确定的 f f f 的 确切的值 的 最小操作次数。
示例
示例一:
输入:k = 1, n = 2
输出:2
解释:
鸡蛋从 1 楼掉落。如果它碎了,肯定能得出 f = 0 。
否则,鸡蛋从 2 楼掉落。如果它碎了,肯定能得出 f = 1 。
如果它没碎,那么肯定能得出 f = 2 。
因此,在最坏的情况下我们需要移动 2 次以确定 f 是多少。
示例二:
输入:k = 2, n = 6 输出:3
示例三:
输入:k = 3, n = 14 输出:4
官方题解
此处摘取了解法一
使用 动态规划 的方法解此题,状态可以表示成 ( k , n ) (k, n) (k,n), k k k 鸡蛋数量 n n n 楼层数量,从 x x x 层楼扔鸡蛋:
- 鸡蛋不碎:状态转换为 ( k , n − x ) (k, n - x) (k,n−x),鸡蛋数不变, f f f 可能在上方的 n − x n - x n−x 楼层上,问题规模缩小
- 鸡蛋碎了:状态转换成 ( k − 1 , x − 1 ) (k - 1, x - 1) (k−1,x−1), 少了一个鸡蛋, f f f 在第 x x x 层楼的下方,问题规模缩小
定义 d p ( k , n ) dp(k,n) dp(k,