这道题很抽象 第一次见完全理解不了
现在终于有那么点理解了┭┮﹏┭┮
#include <iostream>
using namespace std;
int dp[5][1010];//用i部手机 测试j次确定耐摔指数
//确定耐摔指数:到楼顶没摔坏 或者 到i-1没摔坏 i摔坏
//先看dp[1][j]一部手机 摔到楼顶才能确定耐摔指数 最坏运气
//第一部手机坏了才能第二部手机
//前一部手机摔坏 换手机去楼上 前一部手机没摔坏 不换手机去楼下
int main()
{
for(int i=1;i<=3;i++)
for(int j=1;j<=1000;j++)
{
dp[i][j]=j;
}
for(int i=2;i<=3;i++)
for(int j=1;j<=1000;j++)
for(int k=1;k<j;k++)//k用于枚举当前层在哪个楼层
{
if(i<j)
{
//前一部手机坏了才能下一部手机
//min求的是最佳策略
//第多少层不重要 重要的是还有多少层 剩余的层数才是关键 因为最坏运气
dp[i][j]=min(dp[i][j],max(dp[i-1][k-1],dp[i][j-k])+1);
}
}
cout<<dp[3][1000];
return 0;
}