100层摔两个鸡蛋的问题

这是一道动态规划的题目。
参考两个链接,可以理解解法。
1. http://blog.csdn.net/lzshlzsh/article/details/5951447
2. http://www.cnblogs.com/Donnnnnn/p/5720729.html

在(1)中,把100层摔鸡蛋问题,化成动态规划理解
f(a,b)表示现在有a个鸡蛋,可以允许测试b次,那么可以被测出来的层数是多少。
譬如,f(a,b)=100。我不知道哪一层是临界层,也不知道怎么分段去测,但是我肯定如果有100层,我通过a个鸡蛋,进行b次测试就一定能够测出来。
这里分两种情况
1.如果第一次测试,我在x层扔下来,鸡蛋摔破了。损失一个鸡蛋a-1;损失一次测试b-1。所以是f(a-1,b-1)
2.如果第一次测试,我在x层扔下来,鸡蛋没有摔破,鸡蛋无损失a;损失一次测试b-1。所以是f(a,b-1)
综合两种情况:

f(a,b)=f(a-1,b-1)+f(a,b-1)+1;

其实这里优点难理解。我的理解是,1是本次测试所要扣除的1。之所以前面两个f要相加,是因为我现实中可能性就是有破和不破这两种,我都是可以自己控制解决这两种情况的。一层楼,可能发生两种情况,但是上面的层和下面的层我都掌握着,都涵盖到了。所以用加法,说明我总共能够测这么多层楼。

除了表达式外,还有两个公式
f(a,1)=1;我有a个鸡蛋,但是只能测一次,那肯定是只能测出一层楼了。
f(1,b)=b;我有1个鸡蛋,总共可以测试b次,我肯定是只能从1-n层的顺序测试,只能测b层楼。

好了,现在列个表格,求出来就可以了。

f(a,b)=f(a-1,b-1)+f(a,b-1)+1

这里写图片描述

行数是鸡蛋数目。列数是测试次数。我们知道2个鸡蛋测试14次就可以测试105层楼。

可是,我们想要知道究竟实际是如何分段测试的?看(2)

(2)在 2 链接中,有说明100层楼,我们如果平均分段
10—20—30—40—50—…这样子平均分段
其实这样子分段,段是平均的,但是我的测试的次数是不平均的。
试想在10层鸡蛋不破,我们就要测试20。20层一定是从10层过来的,这就意味着,这里多了一个测试次数。所以,最佳的分段方案上,上层楼层段内层数比下层楼层段类层数少一层。这样就保证了无论临界楼层在哪个区间段,我们总能通过同样的试探次数将能将其找出来。

可以根据14和上下层相差1的关系来分层。
2–15
16–28

验证每次测试都是14次:
15分段值1次
2–14 一共13次
所以14次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值