动态规划:鸡蛋掉落

问题出处:中文版 LeetCode 第 887 题 - 鸡蛋掉落 问题

问题描述:(源自 LeetCode)

你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N  共有 N 层楼的建筑。

每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。

你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。

每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。

你的目标是确切地知道 F 的值是多少。

无论 F 的初始值如何,你确定 F 的值的最小移动次数是多少?

问题理解:

给定两个参数 K个鸡蛋 N层楼,目标是在任何F值情况下,寻找 最小移动次数

由于F值可以为任意值,则 最小移动次数 的下限应该取 最坏情况 下的值。

因此,问题的核心是寻找一种在 最坏情况 下的 最优方案

由于鸡蛋的数量在寻找过程中是变化的,即某一步骤的鸡蛋数量,取决于前一步骤的鸡蛋是否破碎。

因此,尝试使用 动态规划 的方法来解决问题。

动态规划:

首先,要确定每一步之间的关系表达式,设 最小移动次数 为 \small y,关系表达式为 \small f(N,K),即 \small y = f(N, K)

然后,假设第一步在 X 层掉落鸡蛋,则存在两种情况:

(1)鸡蛋破碎:剩余 K - 1 个鸡蛋,剩余需要确认的楼层数为 X - 1 层;

(2)鸡蛋完好:剩余 K 个鸡蛋,剩余需要确认的楼层数为 N - X 层;

此时,进入第二步尝试,问题已被拆分为两个子问题:

(1)给定 K - 1 个鸡蛋 和 X - 1 层楼,确定 最小移动次数,即 \small f(X-1, K-1)

(2)给定 K 个鸡蛋 和 N - X 层楼,确定 最小移动次数,即 \small f(N - X, K)

由于要找 最坏情况 下的解,因此,对于两个子问题的解,应该取较大的一个解,即

\small max(f(X - 1, K - 1), f(N - X, K))

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值