题目描述
思路分析
最佳策略、最坏运气 打表法
代码实现
package com.atguigu.TEST;class Main{public static void main(String[] args) {int[][] d = new int[1001][4];//有j个手机测试i层楼需要扔几次for (int i = 1; i <= 1000; i++) {d[i][1]=i;//1个手机扔i次可以测试i层楼}//2部手机for (int i = 1; i <= 1000; i++) {int min=Integer.MAX_VALUE;//尝试 1~i若干种方案,记录方案中次数最小的for (int j = 1; j <=i; j++) {//在j层扔第一个手机min=Math.min(min,Math.max(d[j-1][1]+1,d[i-j][2]+1));//max里面就是摔坏了和没摔坏两种情况取较大的,也就是运气坏的。//没摔坏:还有i-j层,手机数目不变//摔坏了: 还有j-1层,手机数目-1}d[i][2]=min;}//三部手机for (int i = 1; i <= 1000; i++) {int min=Integer.MAX_VALUE;for (int j = 1; j <=i; j++) {min=Math.min(min,Math.max(d[j-1][2]+1,d[i-j][3]+1));}d[i][3]=min;}System.out.println(d[1000][3]);}
}
答案
19