扔雞蛋問題

問題:有m層的高樓,n個雞蛋,需要扔幾次雞蛋才能確定使雞蛋落地後變碎的最低樓層,雞蛋如果沒碎可以重複使用

int minTimes(int m, int n) {
    vector<vector<int>> dp(m + 1, vector<int>(n + 1));
    int fk;

    for (int j = 1; j <= n; ++j) {
        dp[0][j] = 0;
        dp[1][j] = 1;
    }
    for (int i = 1; i <= m; ++i)dp[i][1] = i;

    for (int i = 2; i <= m; ++i) {
        for (int j = 2; j <= n; ++j) {
            dp[i][j] = INT_MAX;
            for (int k = 1; k <= i; ++k) {
                fk = 1 + max(dp[k - 1][j - 1], dp[i - k][j]); //從第k層樓扔,碎了,不碎
                dp[i][j] = min(dp[i][j], fk);
            }
        }
    }

    return dp[m][n];
}

Reference

  1. 復工復產找工作?先來看看這道面試題:雙蛋問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章