1. 程式人生 > >lintcode584- Drop Eggs II- medium

lintcode584- Drop Eggs II- medium

bsp color 動態 rom n) spa see 存儲 case

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 = 2

, n = 100 return 14
Given m = 2, n = 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