雞蛋掉落問題

題意:有kk個雞蛋,nn層高的樓,問:最壞情況下,最少需要扔多少次雞蛋才能知道從第幾層樓開始往下扔雞蛋,雞蛋會碎。

思路:這個題原題題意太迷,我還說二分呢,後來認真看看題目才知道,雞蛋是有限的,也就是說,假設我們有兩個雞蛋,要測100層樓,比如我從50層先扔下去一個,它碎了,那我們另一個就不能冒險,只能從第一層開始,假設在第49層碎了,那扔了50次才試出來。
動態規劃的思想可以很好的解決這個問題,假設f[i][j]f[i][j]表示使用ii個雞蛋,扔jj次,準確測出的樓層數,若準確測出的樓層數大於nn,則答案就是jj,這個準確測出的意思就是比如我們有1個雞蛋,我們只能準確測出1層,因爲在第1層扔了,如果碎了,那就是0層,沒碎就是1層。

我們現在的局面是ii個雞蛋扔jj次,這個局面可以由前兩種局面轉化而來,第一種是雞蛋沒碎,也就是ii個雞蛋扔了j1j-1次,第二個是雞蛋碎了,也就是i1i-1個雞蛋扔了j1j-1次。

轉移方程就是:f[i][j]=f[i1][ji]+f[i][j1]+1f[i][j]=f[i-1][j-i]+f[i][j-1]+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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章