博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Egg dropping问题整理
阅读量:6248 次
发布时间:2019-06-22

本文共 706 字,大约阅读时间需要 2 分钟。

  这个问题,由于已经见过好几次,所以其大致的解法我是知道,是用DP来做,对目前有多少个鸡蛋和目前要在多少层楼梯中确定目标层的组合做遍历,利用子问题结构来求解。题目要求求出在最坏情况下找出摔鸡蛋不碎的最高楼层。

  但是我昨天在实际写递推公式的时候遇到了这样的一个问题。

设目前有K个鸡蛋,有l层楼梯,那么假如我在i层扔一个鸡蛋,在最坏情况下进一步还需要:

  我昨天下意识的写成了max(a[K-1,i-1],a[K,l-i]),但一对答案发现应该是max(a[K-1,i-1],a[K,l-i])。为什么呢?区别在于当鸡蛋没有摔破,那么最高楼层确实可能就是 i 啊,那么,为什么这个题目题目的递归方程和我想的我一样呢?

 

  过了一天,仔细想了一下,原因是这样的:

  首先,为了确定我理解了问题,我问我自己:如果只有一个鸡蛋,现在有l层,那么最坏我需要扔多少次鸡蛋才能保证能找出摔鸡蛋不碎的最高楼层?昨天我的答案是l-1次,但今天我想清楚了,应该是l次。(明确0层的高度为0,一定不会摔碎),所以即使只有一层,最高楼层仍有可能为0或者为1.

  进一步的,假如在i层鸡蛋碎了,那么问题可以完美转化为a[K-1,i-1];但如果在i层鸡蛋没有碎,那么这个时候可将i层看作是是0层,故问题可转化为a[K,l-i] ,因为目前我们已经能肯定i层扔鸡蛋不会碎。

  所以我之前的理解之所以出问题,导致一个偏大的次数,是因为①我对1个鸡蛋的情况理解有偏差②我没有完全理解0层高度为0,能保证不碎这一前提。

转载于:https://www.cnblogs.com/cool-breezer/p/10621622.html

你可能感兴趣的文章
oracle卸载Oracle Clusterware
查看>>
Centos7安装rabbitmq server 3.6.0
查看>>
kali 卸载程序
查看>>
'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)
查看>>
使用阿里云 身份证号正反面拍照图片识别信息
查看>>
光场理论及成像应用
查看>>
mongodb——安装单节点mongodb*
查看>>
正则表达式,grep/egrep工具的使用
查看>>
安装MariaDB和Apache
查看>>
遗传算法入门--连载10
查看>>
NS2:实验五置信区间
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
设计模式 责任链模式
查看>>
java枚举类型
查看>>
我的友情链接
查看>>
RESTful API 设计指南
查看>>
迷渡:免费的编程中文书籍索引
查看>>
PHP常用正则表达式汇总
查看>>