#分析,假设x是最优解的最多次数。则第一个鸡蛋第一次从第x层扔(不管碎没碎,还有x-1次尝试机会)。
# 如果碎了,则第二个鸡蛋在1~x-1层中线性搜索,最多x-1次;
# 如果没碎,则第一个鸡蛋第二次从x+(x-1)层扔(现在还剩x-2次尝试机会)。
# 如果这次碎了,则第二个鸡蛋在x+1~x+(x-1)-1层中线性搜索,最多x-2次;
# 如果还没碎第一个鸡蛋再从x+(x-1)+(x-2)层扔,依此类推。
# x次尝试所能确定的最高楼层数为x+(x-1)+(x-2)+...+1=x(x+1)/2。
#1.两个鸡蛋问题f[n] = min{ 1+max(i-1,f[n-i]) | i=1..n } 初始条件: f[0]=0(或f[1]=1)
#2.m个鸡蛋问题f[n,m] = min{ 1+max(f[i-1,m-1], f[n-i,m]) | i=1..n } 初始条件:f[i,0]=0(或f[i,1]=i)
import numpy as np
def computeMinDropsInWorstCase(eggs,floors):
table=np.zeros((eggs+1,floors+1))
#如果只有0楼或者一楼时
for i in range(eggs+1):
table[i][0]=0
table[i][1]=1
#如果只有一个鸡蛋
for j in range(floors+1):
table[1][j]=j
#其他情况,table( eg
扔鸡蛋问题python编写
最新推荐文章于 2022-04-13 21:14:15 发布