扔鸡蛋
思路: 我们使用最小次数,所能到达的最大层数。 如果层数超过当前的层数,记录最小的次数t.
/**
*
* 描述:
*
* 思路:
* 随着次数增加,所能到达的最大楼层。
*
* 规划:
* 碎了:1 + dp(t - 1, k - 1)
* 没碎:dp(t-1, k)
*
* dp = (
* 1 + dp(t - 1, k - 1) + dp(t-1, k)
* )
*
*/
function dpFloor(n, kk) {
// 初始化
const dp = new Array(n + 1).fill(0).map(() => new Array(kk + 1).fill(0));
// dp
for (let t = 1; t <= n; t++) {
for (let k = 1; k <= kk; k++) {
if (k === 1) {
dp[t][k] = t;
} else {
dp[t][k] = 1 + dp[t-1][k-1] + dp[t-1][k];
}
// 最小的t,使得楼层超过
if (dp[t][k] >= n) {
return t;
}
}
}
return n;
}
// -----> 测试用例
const result = dpFloor(100,2);
console.log('========result=========', result);