Lootcode 算法心得

本文探讨了经典的丢鸡蛋问题,通过动态规划算法找出在有限鸡蛋和楼层情况下,确定摔破鸡蛋的最小投掷次数。文章介绍了两种方法实现动态规划,并提供了Python代码示例。
摘要由CSDN通过智能技术生成

1.丢鸡蛋问题,已知K个鸡蛋,N层楼,求投掷鸡蛋最小次数(能够判断鸡蛋摔破的楼层)

若在第i层,有一个鸡蛋时:

1)摔碎:则需尝试投掷 i-1次,即dp[i-1]

2)未摔碎:则需尝试投掷 n-i次,即dp[n-i]

3)则共需max(dp[i-1],dp[n-i]) +1 ,1为本次投掷

若在第i层,有K个鸡蛋时:

1)摔碎:则有K-1个鸡蛋,需尝试投掷 i-1次,即dp[K-1][i-1]

2)未摔碎:则有K个鸡蛋,需尝试投掷 n-i次,即dp[K][n-i]

3)则共需max(dp[K-1][i-1],dp[K-1][n-i])+1 的最小值  ,其中dp[1][i-1]=i-1

 

2.此时我们采取逆向思路

1.丢鸡蛋问题,已知K个鸡蛋,我们最少需要投掷i次,则我们在那一层?:

1)摔碎:则我们在dp[K-1][i-1]层

2)未摔碎:则我们在dp[K][i-1]层

3)则有,dp[K][i]=dp[K-1][i-1]+dp[K-1][i-1]+1      

很显然,第一个鸡蛋要从X层扔下去,如果烂了,还可以用另外一个鸡蛋从第一层向上开始扔。 
现在,希望至少 扔鸡蛋 X 次,就可以判断出100层楼。那就假设鸡蛋一直没烂,第一次扔完鸡蛋之后,可以得出楼层 X,然后还有X-1次机会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值