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

问题

x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。

各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,

并且评定出一个耐摔指数来,之后才允许上市流通。

x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。

塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。

如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。

特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。

如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n

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

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

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

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

思路

一开始以为可以用二分法解决,但是手机的数量有限,除非有无数个手机用来测试,否则不能用二分法

动态规划解决问题

动态规划的思想是,首先定义一个数组,可以是一维数组也可以是二维数组,一般二维数组用的比较多。用这个数组来记录此问题在某个状态条件下的一个解,而当前的问题又根据之前的记录来解决(历史记录解决当前问题)

首先,定义一个数组dp[i][j]用来存放每一步时的结果状态;然后,找出一个有关这个数组的递推公式;最后找出递推的初始条件。这个过程和递归类似

回到本题

可以先看这个视频的讲解:双蛋问题

分割思想:选一段距离分割,先扔一部手机试探来缩小试探范围,剩下的在此范围中一个一个的试

这里,我们并不知道分割多少才能得到最佳结果,所以每次分割数k都从1到当前层数累加,寻找最佳状态。

先定义存放次数的数组dp[i][j],表示在第i层,剩下j部手机时的测试次数。初始条件就是当手机数为1时,必须一层一层试,所以dp[i][1]=i;

当手机数>=2时,当分割在第k层,也就是在第k层扔下了前一部手机,此时有两种情况:

1.摔坏了,那么去k层之前找,还剩j-1部手机,还要找k-1次;

2.没摔坏,去k层之后找,则剩下j部手机,还要找i-k次;

因为是最坏情况,所以要取两种情况中次数最多的那一次:max(dp[k-1][j-1]+1,dp[i-k][j]+1);

而对于每个可能的分割k,都有一个对应的结果Mk

又因为是最佳策略,所以要在所有Mk中找最小的值:min(minn, max(dp[k-1][j-1]+1,dp[i-k][j]+1));

代码

public class ShuaiShouJi {public static void main(String[] args) {// TODO Auto-generated method stubint [][]dp=new int[1001][4];         //塔高i层,j个手机时的测试次数dp[i][j]次int i,j,k,minn = 0,maxn;for(i=1;i<=1000;i++) {dp[i][1]=i;}for(i=1;i<=1000;i++) {for(j=2;j<=3;j++) {minn=99999;for(k=1;k<=i;k++) {maxn=Math.max(dp[k-1][j-1]+1, dp[i-k][j]+1);minn=Math.min(minn, maxn);}dp[i][j]=minn;}}System.out.println(dp[1000][3]);}
}

蓝桥杯练习——摔手机测试次数相关推荐

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

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

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

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

  3. 2018蓝桥杯省赛---java---B---4(测试次数)

    题目描述 思路分析 最佳策略.最坏运气 打表法 代码实现 package com.atguigu.TEST;class Main{public static void main(String[] ar ...

  4. 蓝桥杯耐摔指数——python

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

  5. Java实现第九届蓝桥杯耐摔指数

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

  6. java蓝桥杯 基础练习 芯片测试

    问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏.而用坏芯片测试其他芯片时,会随机给出好或是 ...

  7. 蓝桥杯基础练习~芯片测试FJ的字符串Sine之舞数的读法完美的代价

    试题 基础练习 芯片测试 提交此题 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯 ...

  8. 蓝桥杯第九届决赛-交换次数-java

    交换次数 题目提交:https://www.dotcpp.com/oj/problem2294.html 参考及思路:https://blog.dotcpp.com/a/72922 import ja ...

  9. 蓝桥杯 基础练习 芯片测试

    问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏.而用坏芯片测试其他芯片时,会随机给出好或是 ...

最新文章

  1. H5页面适配所有iPhone和安卓机型的六个技巧
  2. 2)机器学习基石笔记Lecture2:Learning to Answer Yes/No
  3. LINUX的DNS怎么设置?linux下如何修改DNS地址
  4. 美国人竟然是这样教育小学
  5. python操作crontab定时任务
  6. JavaScript中浏览器兼容性解决办法
  7. 微信备份时提示不在同一个网络
  8. 注册码系统V2的自动发卡功能使用流程
  9. mysql workbench中PK,NN,UQ,BIN,UN,ZF,AI字段类型标识说明
  10. 移动端VUE实现一周课程表
  11. hdu 5234 Happy birthday
  12. Keil软件简单的使用说明
  13. hdu1754(线段树单点更新)
  14. CentOS查看主板型号及硬件信息
  15. PCB设计走线细节讲解(图文结合|强力推荐)
  16. 行车路线(改)(图的应用)
  17. ejabberd XMPP服务器有用的配置及其介绍
  18. 《企业管理概论》在线平时作业1
  19. ValueError: Excel file format cannot be determined, you must specify an engine manually.解决问题亲测有效
  20. 天地图标注获取与修改并保存信息

热门文章

  1. mac升级mysql_Mac如何升级Mysql数据库 Mac升级Mysql数据库步骤
  2. 语音转文字软件哪个好,这三款值得收藏
  3. 从零开始做一款Unity3D游戏<一>——亲自上手使用Unity
  4. c语言求解线性方程组ax=b,用C语言求解N阶线性矩阵方程Ax=b的简单解法
  5. 游戏陪练 预约交友 语音聊天 双端APP源代码+编译说明
  6. 健康计划 用户输入身高(m),体重(kg) 计算公式:BMI = 体重 / 身高^2 BMI < 18.5:过轻 18.5≤ BMI <24:正常 24 ≤ BMI <27:过重 27
  7. 微信小程序 使用 fly接口请求框架
  8. winxp下用ssh控制 linux 服务器
  9. 职通未来 The Next One——赴一场不一样的招聘会
  10. 数据类型及其表现形式