关于Drop eggs

首先,我们有两个鸡蛋,那么第一个鸡蛋一定是按照一定的间距来扔的,通过第一个鸡蛋找到的间距中再一个一个的试过去。
举个例子,假如当前我们要解决的问题是100层楼,那么假如我们一开始按照10作为间距的话,如果n是9的话,我们就要扔一次第一个鸡蛋,扔9次第二个鸡蛋,也就是需要10次,但这个明显不是最坏的情况,如果n是99的话,我们就需要扔10次第一个鸡蛋,扔9次第二个鸡蛋,那么需要19次。这种情况就是最坏的情况,现在再反过来想,我们一开始以10作为间距真的是最优的解吗,很明显如果我们是以等间距扔第一个鸡蛋的话我们每一个区间的最坏查询情况都是不相等的,最坏的查询情况肯定是最后一个区间的最后一个数。

那么再想,如果我们能够让每一个区间的最坏查询次数都相等的话,最坏的查询就能够达到最优的方案,那么怎么才能达到这个条件呢。

仔细思考,查询到第二个区间的时候已经扔了一次第一个鸡蛋了,查询到第x个区间的时候已经扔了x-1次第一个鸡蛋了,所以显然如果我们等间距的话我们每一个区间的查询都要比前面一个区间多1次,所以我们可以每过一个区间把区间长度-1,这样就能够达到最佳的方案。
那么最大的那个区间怎么进行计算呢?
其实到这一步不难发现,这个最大区间就是我们要求的最坏的情况的查询数了。
n + (n-1) + (n-2)…… + 1 = N。
这样我们就可以用简单的循环来求得这个n。


本题需要用long类型,因为这题目有溢出的testcase

如果我们能够让每一个区间的最坏查询次数都相等的话,那么最坏的查询数是比其他情况都要小的,所以这个就达到了最优的方案(最优的方案就是要我们达到最坏的情况的查询数最小)。


英文思路出处:http://datagenetics.com/blog/july22012/index.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值