考虑使用 \(k\) 个鸡蛋,计算进行 \(t\) 次操作可以测试的最高楼层数,记作 \(dp[t][k]\)
最小的 \(t\) 使得 \(dp[t][k] \ge n\) 即为最终答案
转移状态分鸡蛋碎了和没有碎
\(dp[t][k] = 1 + dp[t-1][k] + dp[t-1][k-1]\)
class Solution:
def superEggDrop(self, k: int, n: int) -> int:
if n == 1: return 1
dp = [0] * (k + 1)
for i in range(1, n + 1):
for j in range(k, 0, -1):
dp[j] = dp[j] + dp[j - 1] + 1
if dp[j] >= n: return i
return n