智游城

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: 老陈
打印 上一主题 下一主题

策略问题

[复制链接]
11#
rahj 发表于 2020-4-13 17:47:56 | 只看该作者
ahthwl 发表于 2020-4-13 17:38
貌似t题主对于鸡蛋和手机概念转换的过程有点无力……针对这个题目,两个鸡蛋最多13次可以确定出100层楼里 ...

你这么一说我恍然大悟,原来是这个原因
我算出是14,另外这题很看天意的,题里面写的是最坏情况,要是100层的时候还碎不了,那临界点其实是无法确定的
不如假定没有超过100层的楼房比较好
12#
notch 发表于 2020-4-14 10:00:38 | 只看该作者
rahj 发表于 2020-4-11 17:13
小学奥数题:有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔 ...

说一下解题的过程吧
13#
rahj 发表于 2020-4-14 12:54:51 | 只看该作者
notch 发表于 2020-4-14 10:00
说一下解题的过程吧

和楼上说的差不多,通过动态规划来解
最坏情况下,摔x次,第一个鸡蛋手机从x层摔,最坏情况之一是碎了,那么接下来倒推第二个鸡蛋(手机)要摔x-1次
之二是没碎,那么还是那个鸡蛋(手机),接下来从x+(x-1)层摔,因为还是两个情况,碎了还是第二个摔x-1次,没碎继续上高层x+(x-1)+(x-2)摔
最后高斯一下,解出x(x+1)/2 >= 100,x=14
这里是100是因为题目没说100层会碎,按照题意和天意,很可能100层也不会碎,或者13层就会碎,因此最小14次
14#
ahthwl 发表于 2020-4-15 17:57:46 | 只看该作者
rahj 发表于 2020-4-14 12:54
和楼上说的差不多,通过动态规划来解
最坏情况下,摔x次,第一个鸡蛋手机从x层摔,最坏情况之一是碎了,那么接 ...

14是对的,我很久以前做的,记错了。
15#
 楼主| 老陈 发表于 2020-4-18 08:23:33 来自手机 | 只看该作者
本帖最后由 老陈 于 2020-4-17 18:31 编辑

这是我在微信朋友圈里看到的一道题,由于对我来说原题难度太大,当时我没做出来,所以我简化后发到这里。原题如下:
有一家手机生产公司,为了测试手机的抗摔性能,他们选择了一栋N层楼的建筑,把手机从楼上往下扔,目的找到一个临界层,在这层不能摔坏,再高一层就摔坏。你最多只能用M部手机。让你制定一个方案,要求这个方案在最坏的情况下测试次数最少。
16#
 楼主| 老陈 发表于 2020-4-27 09:06:56 来自手机 | 只看该作者
本帖最后由 老陈 于 2020-4-28 18:15 编辑

我们用
F(M,N)
表示N层楼M部手机的试验次数。
我们选择第一部手机从第K层扔下,
如果手机摔坏,试验次数为:
F(M-1,K-1)+1
如果手机没有摔坏,试验次数为:
F(M,N-K)+1
我们取其中较大的那个。
我们取K从1到N,得到N个数,取最小的数。就得到了
F(M,N)
有的城友会问
F(M-1,K-1)和F(M,N-K)是未知的啊?
不用担心,两个参数至少有一个比M或N小,我们可以先求参数小的。一直到(1,2),(2,1),(1,1),显然:
F(1,K)=K
F(K,1)=1


17#
rahj 发表于 2020-4-29 14:52:53 | 只看该作者
老陈 发表于 2020-4-27 09:06
我们用
F(M,N)
表示N层楼M部手机的试验次数。

找到个M层楼N个鸡蛋的试验次数的解答,对付着看看
我觉得手算的难度在于递归嵌套,有空我也出个抽屉原理的题,我上本科自个出的
__________________________分隔______________________________
此题还有一个扩展,就是为N个鸡蛋从M层摔找出最小值。
  那就不是很好手解了,所以写了代码,使用动态规划原理。动态规划式子如下:

f[n][m] = 1+max(f[n-1][k-1],f[n][m-k]) k属于[1,m-1]
解释下原理:
1、当手里有n个的时候,鸡蛋从k层往下摔,如果破了,那么手里只有n-1鸡蛋了,那么就需要测试f[n-1][k-1]楼层。或者更通俗好理解点的,我们运用2个鸡蛋100楼层的题目举例子。以上式子变为:f[2][m] = 1+max(f[1][k-1],f[2][m-k])
  那么当手里有2个鸡蛋的时候,在k层摔,碎了。那么现在手里也就只有一个鸡蛋了,此时我们必须遍历1~k-1找出第一次碎的楼层。所以为1+f[1][m-k],前面的1代表在k层的操作。
2、没破,那么手里还有n个鸡蛋,那么需要测试k+1~m这些楼层。

此时我想问下,当手里有2个鸡蛋测试1~m-k层和手里有2个鸡蛋测试k+1~m有什么区别?
有人说有,因为楼层越高越容易碎,那其实是你个人的想法罢了。其实并没有区别,所以第一个公式可以写为f[n][m-k]。
————————————————
版权声明:本文为CSDN博主「林子木」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wolinxuebin/java/article/details/47057707

18#
 楼主| 老陈 发表于 2020-4-30 11:25:09 来自手机 | 只看该作者
rahj 发表于 2020-4-29 00:52
找到个M层楼N个鸡蛋的试验次数的解答,对付着看看
我觉得手算的难度在于递归嵌套,有空我也出个抽屉原理的 ...

摔鸡蛋很简单,1层楼摔下,鸡蛋肯定坏。
如果摔手机,手算也没有任何难度,就是计算量大。
具体做法:
比如1000层楼30部手机。
画一张30行,1000列的大表格。
把第一行和第一列填进数字,第1行都是列号,第1列都是1。
然后逐个由小到大填写F(M,N)到M行N列。
19#
rahj 发表于 2020-5-2 10:25:41 | 只看该作者
老陈上道了,知道鸡蛋也是能摔坏的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|智游城论坛

GMT+8, 2024-11-24 09:02 , Processed in 0.097078 second(s), 7 queries , Redis On.

Powered by Discuz! X3.2

© 2001-2012 Comsenz Inc.

返回顶部