测试次数

  • 题目
  • 初识DP(动态规划)
  • DP的解题思路
  • 思路分析
  • 代码
  • 如何思考此类类似问题

题目

星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。
各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。

x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。

如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。
特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。
如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n

为了减少测试次数,从每个厂家抽样3部手机参加测试。

某次测试的塔高为1000层,如果我们总是采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?

请填写这个最多测试次数。

注意:需要填写的是一个整数,不要填写任何多余内容。

初识DP(动态规划)

个人认为DP就是深度递推
DP往往是分析一些具有递推性质的问题时的一些常用算法、
常见的有:计数型,存在型,决策型
此题大致就是决策型,但我没想到的是,决策是双重性的,(最佳策略,最坏运气

DP的解题思路

1.理解题意,确定状态
2. 分解为子问题,推出转移方程
3. 初始条件和边界情况
4. 计算顺序确定(大部分是从前往后从小到大去计算)

思路分析

1.理解题意,确定状态
题目最终要的是测试次数,其与手机数层数有关,手机数少,为了保证能测出,必须多测,同样,不同的楼层开始测也会影响,但我们这里不考虑二分,因为二分只对手机数庞大的情况下才有效。
故我们确定以dp[i][j]来确定符合题意的测试次数(i为要测的层数,j为手机数)
2. 分解为子问题,推出转移方程
这一步是题目的关键,其包含了3大嵌套和递推关系,分析子问题,我们可以从,任意情况,也可从倒数第二步去分析直到方便我们找到递推式
假设我们只有一步手机,我们只能从第一层扔(注意!从初始情况开始分析子问题才能达到我们的递推式)要扔i次
如果我们有两部手机,要在i层上测,哪我们从哪一层开始呢假设是k层开始,
则有:
在k层摔坏了:dp[k-1][j-1]+1//转化成相当于在剩下的k-1层摔j-1部手机
在k层摔还是好的了:dp[i][j]=dp[i-k][j]+1

而在选择不同层数开始测的同时,我们要取最坏运气,再在这些最坏运气里****找到我们的最优的策略

子问题拆分图解(这样我们就可以拆解成子问题)
为什么可以这样拆:因为我们要的是测试次数,而不是手机的耐摔指数!

3. 初始条件和边界情况
在我们确定多少手机要在几层摔时,需要将dp赋一个最大值,再通过不同层去测取最小值优化

  1. 计算顺序确定
    肯定是从前往后算,得到最后的结果

代码

package practise.bluecompetion2019;public class 测试次数 {static int N=1000;static int M=3;public static void main(String[] args) {int[][]dp=new int[1005][10];for (int i = 1; i <= N; i++) {dp[i][1]=i;//从第一层开始}for (int j=2; j <= M; j++) {for (int i = 1;i<= N; i++) {dp[i][j]=1000000;//先假设dp很大再去优化for (int k=2;k<=i;k++){dp[i][j]=Math.min(dp[i][j],Math.max(dp[k-1][j-1],dp[i-k][j])+1);//最坏运气下的最优策略}}}System.out.println(dp[1000][3]);}
}

如何思考此类类似问题

  1. 1000层扔3步手机,既要最优又要最坏运气,推出不同的楼层测有不同的运气(这就需要我们递推了),最优的话肯定需要我们在结果上做一个最优

Java_B_Province测试次数相关推荐

  1. 测试次数----2018年第九届蓝桥杯C/C++省赛B组 第四题

    题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市 ...

  2. 蓝桥杯练习——摔手机测试次数

    蓝桥杯练习--摔手机测试次数 问题 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试, 并且评定出一 ...

  3. 蓝桥杯摔手机测试次数

    题目: 标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来, ...

  4. 蓝桥杯——测试次数·摔手机(2018JavaB组第4题,17分)

    x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通. x ...

  5. 入门级动态规划:2018年第九届蓝桥杯省赛B组第四题—测试次数( 摔手机 )

    目录 --下面列出用动态规划如何解决此问题-- ①计算若干层楼用若干部手机最少需要摔多少次 ②计算用若干部手机摔若干次最多可以确定多少层楼 原题描述: x星球的居民脾气不太好,但好在他们生气的时候唯一 ...

  6. 算法技能树2-蓝桥杯-python实现测试次数(摔手机)-动态规划(DP)

    文章目录 1.题目描述 2.python解题 1.知识点总结 1.题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规 ...

  7. 2018省赛第九届蓝桥杯真题C语言B第四题题解 测试次数

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机 ...

  8. 蓝桥杯真题:测试次数

    这题是用动态规划去做的,参考: 『蓝桥杯』2018蓝桥初赛 测试次数(扔手机)--动态规划_Miserable_ccf的博客-CSDN博客 我们的目标是求取第n层,有m台手机下最优策略最坏情况下的测试 ...

  9. 【蓝桥杯2018Java】测试次数/耐摔指数

    题目意思的理解 运气最差:直到最后一个手机才能测试出耐摔数 最佳策略:运气最差情况下在所有的测试情况中最少的测试次数 思路 用动态规划去写,我们用二维数组,一个代表楼层数,一个代表手机数,找到二维数组 ...

最新文章

  1. 2020薪资排名第一的专业公布,除了计算机还有这些!
  2. 简书mysql配置_MySQL安装配置
  3. 财报上的云计算战场: 巨头们垄断加剧
  4. Struts2 中#、@、%和$符号的用途
  5. Windows 10推出周年更新,Edge浏览器支持扩展并改进JavaScript支持
  6. JavaScript高级程序设计阅读笔记
  7. nginx完全关闭log
  8. 【BZOJ4025】二分图(可撤销并查集+线段树分治)
  9. IEEE 各项协议、RFC 文档
  10. python3的spyder安装_Python开发环境Spyder安装教程
  11. 高翔orbslam_从编译运行orbslam2说起
  12. 《PMP学习笔记》11.6 子过程:规划风险应对
  13. 黑莓bold模拟器无法上网问题之解决
  14. 向阅读致敬!微信读书产品设计策略推导
  15. 计算机管理如何格式化u盘,如何格式化U盘【图文教程】
  16. no theme named ‘sphinx_rtd_theme‘ found (missing theme.conf?)
  17. 水晶报表打印纸张设置
  18. c语言错误c2198,这段哪里错了。。。
  19. Arduino与Proteus仿真实例-密码门禁控制仿真
  20. rust腐蚀网页游戏_Rust腐蚀游戏中的12个实用小技巧

热门文章

  1. 差分隐私(Differential Privacy)定义及其理解
  2. ubuntu修改u盘权限_手把手教你使用U盘安装Ubuntu系统
  3. 计算机毕业设计(附源码)python英语四六级在线学习系统
  4. Arduino入门教程
  5. 人脸识别被滥用,三人成虎不足挂齿?
  6. 任天堂游戏服务器系统,传闻:任天堂正在替换用了18年的多人服务器系统
  7. webdav 文件服务器,WebDAV 扩展
  8. matlab工程应用基础,Matlab工程应用基础_2_214090
  9. 【移动安全高级篇】————1、Android沙盘原理与实现
  10. 计算机不识别硬盘怎么解决,电脑不认硬盘的原因 怎么解决电脑读不到硬盘