Egg dropping问题整理

  这个问题,由于已经见过好几次,所以其大致的解法我是知道,是用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,能保证不碎这一前提。

posted @ 2019-03-29 15:33  whichone  阅读(154)  评论(0编辑  收藏  举报