因为题目是找最优策略。
所以想到用动态规划。
用动态规划,从少到多,逐一讨论,得出动态方程就行。
package 第九届;
//2021年3月27日下午5:49:14
//writer:apple
public class 手机测试 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int dp[][]=new int [4][1001];
for(int i=1;i<=1000;i++) dp[1][i]=i;//初始化1次机会,i楼
for(int i=1;i<=1000;i++)//两次机会,有i楼时
{
int minn=Integer.MAX_VALUE;
for(int j=1;j<=i;j++)//共i楼,从第j测试
{
int maxx=Math.max(1+dp[2][i-j],1+dp[1][j-1]);
minn=Math.min(minn, maxx);
}
dp[2][i]=minn;//在最坏的情况中挑选出最小值,就是对应的最优策略。
}
for(int i=1;i<=1000;i++)
{
int minn=Integer.MAX_VALUE;
for(int j=1;j<=i;j++)
{
int maxx=Math.max(1+dp[3][i-j],1+dp[2][j-1]);
minn=Math.min(maxx,minn);
}
dp[3][i]=minn;
}
System.out.println(dp[3][1000]);
}
}