首先确定策略,如果只有一个球那么我们显然只能从下往上一层一层摔直到确认到位置。如果多一个球,那么实验次数就减小了。因为我们可以在某次直接到更高层,然后试错。考虑 dp,由于我们不知道答案楼层是什么,所以楼层不应该放在状态里面。
设 dp(i,j) 表示用 i 个球,实验 j 次可以确定最大高度。
本次测试的楼层应该是 dp(i-1,j-1)+1,因为如果本次气球破了,保证可以用剩下的操作次数和气球完成实验。我们要求的是最高楼层所以应该是要加上最好的情况,也就是气球没破,那就还能往上扩展 dp(i,j-1) 层。于是 dp(i,j)=dp(i-1,j-1)+dp(i,j-1)+1
- 虽然是加起来,但是意思不是都要进行一次,其实是根据气球有没有破碎选择其中一种方式来继续询问。
每次询问就是找到一个最小的 i,满足 f_{i,k}\ge n,二分即可。时间复杂度 O(T\log K)。