題意:有個雞蛋,層高的樓,問:最壞情況下,最少需要扔多少次雞蛋才能知道從第幾層樓開始往下扔雞蛋,雞蛋會碎。
思路:這個題原題題意太迷,我還說二分呢,後來認真看看題目才知道,雞蛋是有限的,也就是說,假設我們有兩個雞蛋,要測100層樓,比如我從50層先扔下去一個,它碎了,那我們另一個就不能冒險,只能從第一層開始,假設在第49層碎了,那扔了50次才試出來。
動態規劃的思想可以很好的解決這個問題,假設表示使用個雞蛋,扔次,準確測出的樓層數,若準確測出的樓層數大於,則答案就是,這個準確測出的意思就是比如我們有1個雞蛋,我們只能準確測出1層,因爲在第1層扔了,如果碎了,那就是0層,沒碎就是1層。
我們現在的局面是個雞蛋扔次,這個局面可以由前兩種局面轉化而來,第一種是雞蛋沒碎,也就是個雞蛋扔了次,第二個是雞蛋碎了,也就是個雞蛋扔了次。
轉移方程就是:
代碼就很明顯了。
class Solution {
public int superEggDrop(int K, int N) {
int[][] dp = new int[K + 1][N + 1];
for (int k = 1; k <= K; k++) {
for (int m = 1; m <= N; m++) {
dp[k][m] = dp[k][m - 1] + dp[k - 1][m - 1] + 1;
if (dp[k][m] >= N) {
return m;
}
}
}
return N;
}
}