扔鸡蛋

题目:

这里写图片描述
两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法

思路:

用动态规划做:

用F[n]表示n层楼最少次数。

假设一个鸡蛋从第i层扔下,破了,则下一个鸡蛋从第1层开始扔,还需要i-1次;如果没有破,则还剩下n-i层,剩下两个鸡蛋,需要F[n-i]次。因此,最少需要判断max(i-1,F[n-i])次。

状态转移方程:f[n]  =  min{  1  +  max(i  -  1  ,f[n  -  i])  |  i  =  1  ..n } 
初始条件: f[  0  ]  =  0  (或f[  1  ]  =  1  )
现在推广成n层楼,m个鸡蛋: 
还是动态规划。假设f[n,m]表示n层楼、m个鸡蛋时找到摔鸡蛋不碎的最少判断次数。则一个鸡蛋从第i层扔下,如果碎了,还剩m-1个鸡蛋,为确定下面楼层中的安全位置,还需要f[i-1,m-1]次(子问题);不碎的话,上面还有n-i层,还需要f[n-i,m]次(子问题,实体n层楼的上n-i层需要的最少判断次数和实体n-i层楼需要的最少判断次数其实是一样的)。 

状态转移方程: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),对所有i


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值