菜鸟心得-鸡蛋掉落-官方题解理解【4】

148 阅读1分钟

扔鸡蛋

思路:
 自底向上,动态规划,规划出最短次数
/**
 * 动态规划,最小次数
 *  dp(n,k) = 1 + min(   max(dp[k-1][n'], dp[k][n-n']) )
 * @param {*} nn 
 * @param {*} kk 
 */
function dpTop(n, k) {
    const dp = new Array(k + 1).fill(0).map(() => new Array(n+1).fill(0));

    // 初始化 一颗鸡蛋
    for (let i = 0; i <= n; i++) {
        dp[1][i] = i;
    }
    // 初始化 第一层
    for (let i = 0; i <= k; i++) {
        dp[i][1] = 1;
    }

    // dp
    for (let i = 2; i <= k; i++) {
        for (let j = 1; j <= n; j++) {
            for (let x = 1; x <= j; x++) {
                const temp = 1 + Math.max(dp[i - 1][x - 1], dp[i][j - x]);
                dp[i][j] = dp[i][j] === 0 ? temp : Math.min(dp[i][j], temp);
            }
        }
    }

    return dp[k][n];
}

const res4 = dpTop(100, 2);
console.log('========res4=========', res4);