对偶思维
互为对偶的两个问题:
- m个鸡蛋测n层楼,在最优策略下,至少需要测多少次?
- p个鸡蛋测q次,在最优策略下,最多可以测多少楼层?
感觉实际最麻烦的地方,在于两种问题到底是什么意思,以及“最优策略”分别到底指的是什么?
代码实现:O(mn)
import sys
def throw_eggs(n, m):
N, M = n + 1, m + 1
f = [[0] * M for _ in range(N)] # m 个鸡蛋扔 n 次的最大可测量楼层数
for i in range(1, N):
for j in range(1, M):
f[i][j] = f[i - 1][j - 1] + 1 + f[i - 1][j]
if f[i][j] >= n: return i
for line in sys.stdin:
print(throw_eggs(*map(int, line.split())))