lintcode584- Drop Eggs II- medium
阿新 • • 發佈:2017-09-25
bsp color 動態 rom n) spa see 存儲 case ,
Given
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