首页 > 其他 > 详细

lintcode584- Drop Eggs II- medium

时间:2017-09-25 09:18:01      阅读:378      评论:0      收藏:0      [点我收藏+]

There is a building of n floors. If an egg drops from the k th floor or above, it will break. If it‘s dropped from any floor below, it will not break.

You‘re given m eggs, Find k while minimize the number of drops for the worst case. Return the number of drops in the worst case.

Example

Given m = 2n = 100 return 14
Given m = 2n = 36 return 8

 
动态规划+递归。用二元数组存储某鸡蛋某层所需的次数。迭代试扔第一个鸡蛋,在某层扔。1.扔碎了即转为鸡蛋少一个,楼层少一层的子问题。2.没扔碎即转化为鸡蛋没有少楼层少为上半层那么多的子问题。
 
思维方式见:http://datagenetics.com/blog/july22012/index.html的“Look see I can do three” 
 
 
public class Solution {
    /*
     * @param m: the number of eggs
     * @param n: the number of floors
     * @return: the number of drops in the worst case
     */
     
    public int dropEggs2(int m, int n) {
        // write your code here
        int[][] dp = new int[m + 1][n + 1];
        
        for (int i = 1; i <= m; i++){
            dp[i][0] = 0;
            dp[i][1] = 1;
        }
        
        for (int j = 1; j <= n; j++){
            dp[1][j] = j;
        }
        
        for (int i = 2; i <= m; i++){
            for (int j = 2; j <= n; j++){
                dp[i][j] = Integer.MAX_VALUE;
                for(int k = 1; k < j; k++){
                    dp[i][j] = Math.min(dp[i][j],
                                        1 + Math.max(dp[i - 1][k - 1], dp[i][j - k]));
                }
            }
        }
        return dp[m][n];
    }
}

 

lintcode584- Drop Eggs II- medium

原文:http://www.cnblogs.com/jasminemzy/p/7590257.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!