动态规划--100层楼2只鸡蛋最少次可以测试最高楼层不摔破

100层楼2个鸡蛋

原题目:100层楼2个鸡蛋最少需要几次测试,才能得到摔破鸡蛋的楼层;
转换题目:两个鸡蛋,进行k次测试,最多可以测试多少层?

分析:第1个鸡蛋测试所在的楼层高度为k层。
①如果第1个鸡蛋在第k层摔破了,第二个鸡蛋就可以从第1层开始慢慢测试,最多k次可以测试到准确楼层;
②如果第1个鸡蛋在k层没有摔破,这个时候就只剩下k-1次机会了,第2次测试的时候第1个鸡蛋就可以在第k+(k-1)层测试。如果第2次第1个鸡蛋摔破了,第2个鸡蛋就可以从k层开始慢慢的往k+(k-1)层测试,如果没有摔破,就继续同样的往更高层测试,第三次的话就应该是k+(k-1)+(k-2)层测试了,这样就可以确保剩下的机会可以准确测试到摔破的楼层。
③所以公式是:k+(k-1)+(k-2)+…+1>=100;转化一下就是:k(k+1)/2>=100;求解k>=14;所以100层楼最少14次可以测试到准确摔破楼层;

同样的道理:
如果是N层楼2个鸡蛋呢?
公式是k(k+1)/2>=N

如果是N层楼3个鸡蛋呢?
考虑到第1个鸡蛋第1次就摔破的可能性,第一次的楼层需要恰到好处。先前k-1次机会能将剩余楼层测试完,那就是最多可以测试k(k-1)/2层楼,所以第一次在k(k-1)/2+1层楼;如果第1次第1个鸡蛋不碎,第2次在此基础上增加(k-1)(k-2)/2+1层楼,于是,3个鸡蛋k次测试机会总共测试楼层数为:[k(k-1)/2+1]+[(k-1)(k-2)/2+1]+…+[2*1/2+1]+[1*0/2+1]={[k^2+(k-1)^2+…+1]-[k+(k-1)+(k-2)+…+1}/2+k=(k^3+5k)/6,k=9。

如果是N层鸡蛋n个鸡蛋呢,以此类推。

点赞