Amo*_*rma 10 puzzle algorithm dynamic-programming
这是问题描述:
假设我们想知道N层建筑中的哪些故事可以安全地从中掉落鸡蛋,哪些会导致鸡蛋在着陆时破裂.我们做了一些假设:可以再次使用在摔倒后存活的鸡蛋.
给定一个N层建筑和一个鸡蛋供应,找到最小化(在最坏的情况下)确定断裂所需的实验滴数的策略.
我已经看到并解决了2个鸡蛋的问题,其中答案是14 = N = 100.我尝试使用DP了解wiki的通用解决方案,但无法理解他们想要做什么.请告诉他们他们是如何到达DP以及它是如何工作的?
编辑:
本条中给出的最高流量可用d滴和e蛋测试的复发如下:
f[d,e] = f[d-1,e] + f[d-1,e-1] + 1
Run Code Online (Sandbox Code Playgroud)
复发很好,但我无法理解它是如何衍生出来的?
这个解释对我来说并不清楚....我只是希望有人用更清晰的话语向我解释这种情况.
Rei*_*ica 10
(1)考虑第一滴打破鸡蛋的情况.然后,当且仅当它最多为f [d-1,e-1]时,您才能确定断裂地板.因此,你不能高于f [d-1,e-1] + 1(当然不应该低于f).
(2)如果你的第一滴没有打破鸡蛋,你就是f [d-1,e]的情况,只是从你的第一滴+ 1的地板开始,而不是从1楼开始.
所以,你能做的最好就是开始在地板f [d-1,e-1] + 1(因为(1))下降鸡蛋,你可以达到f [d-1,e]楼层比那(因为(2)).那是
f[d, e] = f[d-1, e-1] + 1 + f[d-1, e]
Run Code Online (Sandbox Code Playgroud)
小智 9
从Wiki Egg Dropping puzzle我们知道状态转移方程是:
W(n,k) = 1 + min{ max(W(n ? 1, x ? 1), W(n,k ? x)) } , x = 1, 2, ..., k
W(n,1)=1, W(1,k)=k
n=可用的试验蛋数量
k=尚待测试的(连续)楼层数
以下是我的理解.
我们有k地板,n鸡蛋,假设我们用鸡蛋在x地板上测试.只有两种可能的结果:
x-1地板,n-1鸡蛋,反映到W(n-1,x-1)k-x地板,n鸡蛋,它反映到W(n,k-x)由于问题需要最坏的情况,我们必须选择较大的一个以确保最坏的情况有效,这就是我们在W(n-1,x-1)和之间添加最大值的原因W(n,k-x).
此外,正如我们刚刚假设在x地板x上进行测试,可以从中1到k,在这种情况下,我们肯定需要选择最小值以确保最小实验滴数找出N,这就是为什么我们在 {max(W(n ? 1, x ? 1), W(n,k ? x)): x = 1, 2, ..., k}
最后,因为我们使用1了x floor的下降,所以方程式必须加上1,这反映了方程的第一部分.
希望能解决你的难题:-)
| 归档时间: |
|
| 查看次数: |
8999 次 |
| 最近记录: |