鸡蛋掉落问题

鸡蛋掉落问题是一个经典的动态规划题目,给定k个鸡蛋和n层楼,需要找到确定楼层f的最小操作次数。通过动态规划状态转移方程,可以优化到O(knlog2n)的时间复杂度。通过二分查找确定最佳扔鸡蛋楼层,从而解决题目。
摘要由CSDN通过智能技术生成

鸡蛋掉落问题

题意

题意:给你 k k k 个鸡蛋,并可以使用一栋从第 1 1 1 层到第 n n n 层共有 n n n 层楼的建筑

已知:存在楼层 f f f , 满足 0 ≤ f ≤ n 0 \le f \le n 0fn,任何高于 f f f 的楼层落下的鸡蛋都会碎, 从 f f f 楼层或比它低的楼层,将鸡蛋掉落并不碎掉。

每次,可以取一枚鸡蛋从任意楼层 x x x 将其掉落, 1 ≤ x ≤ n 1 \le x \le n 1xn ,如果鸡蛋碎了,不能再次使用,如果鸡蛋没碎,那么可以再次使用这个鸡蛋。

需要计算并返回要确定的 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,nx),鸡蛋数不变, f f f 可能在上方的 n − x n - x nx 楼层上,问题规模缩小
  • 鸡蛋碎了:状态转换成 ( k − 1 , x − 1 ) (k - 1, x - 1) (k1,x1), 少了一个鸡蛋, f f f 在第 x x x 层楼的下方,问题规模缩小

定义 d p ( k , n ) dp(k,n) dp(k,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值