zoukankan      html  css  js  c++  java
  • 面试题目:2个鸡蛋100层楼问题

    • 题目:
    • 两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。

    - 两种思路:

    - 第一种:动态规划,转化公式

    下面是偶的思路。
    
    这是一个很典型的动态规划问题。用确定minNum[n]表示鸡蛋从高n层的楼摔下不碎需要的最小次数。则有
    
    转移方程:
    
    minNum[n ] = min(1 + max(i – 1, minNum[n-1])) for 1<=i <= n
    
    边界条件:
    
    minNum[0] = 0; minNum[1] = 1
    
    假设i是第一次扔鸡蛋的楼层,如果破了,则为了确定下面楼层中的安全位置,需要从第一层挨着试,需要i-1次,不碎的话上面还有n-i层,还剩两个鸡蛋,需要minNum[n-i]次。

    - 第二种:分析法,写出公式

    拿具体的数字作例子,假设100层楼扔16次可以搞定,那么第一次可以且最矮必须从16层扔。碎了好说,从第一层开始试,不碎的话还有15次机会,同理最矮可以从31层开始扔
    
    每次可以扔的最矮楼层如下
    
    16
    
    16 + 15 = 31
    
    31 + 14 = 45
    
    45 + 13 = 58
    
    58 + 12 = 70
    
    70 + 11 = 81
    
    81 + 10 = 91
    
    91 + 9 = 100
    
    超额完成目标。假设需要扔n次,则有:(此n也表示安全下落的层)
    
    n + (n-1) + (n-2) + … + 1 >= 100
    
    n (n +1) >= 200
    
    min(n) = 14
  • 相关阅读:
    继续OI
    [WARNING]考前必读?!
    近些日的总结吧
    续上文
    又是一年NOIP然鹅我考的是高数(虽然我没打并且内容与NOIP无关)(手动滑稽)
    轮船问题(DP基础)
    NOIP2016报零记
    字符数组
    HA-0302 退役
    各种模板(part 2)
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/9463010.html
Copyright © 2011-2022 走看看