蓝桥杯练习——摔手机测试次数
蓝桥杯练习——摔手机测试次数
问题
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]);}
}
蓝桥杯练习——摔手机测试次数相关推荐
- 蓝桥杯摔手机测试次数
题目: 标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来, ...
- 蓝桥杯真题:测试次数
这题是用动态规划去做的,参考: 『蓝桥杯』2018蓝桥初赛 测试次数(扔手机)--动态规划_Miserable_ccf的博客-CSDN博客 我们的目标是求取第n层,有m台手机下最优策略最坏情况下的测试 ...
- 2018蓝桥杯省赛---java---B---4(测试次数)
题目描述 思路分析 最佳策略.最坏运气 打表法 代码实现 package com.atguigu.TEST;class Main{public static void main(String[] ar ...
- 蓝桥杯耐摔指数——python
题目如下 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市 ...
- Java实现第九届蓝桥杯耐摔指数
耐摔指数 题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后 ...
- java蓝桥杯 基础练习 芯片测试
问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏.而用坏芯片测试其他芯片时,会随机给出好或是 ...
- 蓝桥杯基础练习~芯片测试FJ的字符串Sine之舞数的读法完美的代价
试题 基础练习 芯片测试 提交此题 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯 ...
- 蓝桥杯第九届决赛-交换次数-java
交换次数 题目提交:https://www.dotcpp.com/oj/problem2294.html 参考及思路:https://blog.dotcpp.com/a/72922 import ja ...
- 蓝桥杯 基础练习 芯片测试
问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏.而用坏芯片测试其他芯片时,会随机给出好或是 ...
最新文章
- H5页面适配所有iPhone和安卓机型的六个技巧
- 2)机器学习基石笔记Lecture2:Learning to Answer Yes/No
- LINUX的DNS怎么设置?linux下如何修改DNS地址
- 美国人竟然是这样教育小学
- python操作crontab定时任务
- JavaScript中浏览器兼容性解决办法
- 微信备份时提示不在同一个网络
- 注册码系统V2的自动发卡功能使用流程
- mysql workbench中PK,NN,UQ,BIN,UN,ZF,AI字段类型标识说明
- 移动端VUE实现一周课程表
- hdu 5234 Happy birthday
- Keil软件简单的使用说明
- hdu1754(线段树单点更新)
- CentOS查看主板型号及硬件信息
- PCB设计走线细节讲解(图文结合|强力推荐)
- 行车路线(改)(图的应用)
- ejabberd XMPP服务器有用的配置及其介绍
- 《企业管理概论》在线平时作业1
- ValueError: Excel file format cannot be determined, you must specify an engine manually.解决问题亲测有效
- 天地图标注获取与修改并保存信息
热门文章
- mac升级mysql_Mac如何升级Mysql数据库 Mac升级Mysql数据库步骤
- 语音转文字软件哪个好,这三款值得收藏
- 从零开始做一款Unity3D游戏<一>——亲自上手使用Unity
- c语言求解线性方程组ax=b,用C语言求解N阶线性矩阵方程Ax=b的简单解法
- 游戏陪练 预约交友 语音聊天 双端APP源代码+编译说明
- 健康计划 用户输入身高(m),体重(kg) 计算公式:BMI = 体重 / 身高^2 BMI < 18.5:过轻 18.5≤ BMI <24:正常 24 ≤ BMI <27:过重 27
- 微信小程序 使用 fly接口请求框架
- winxp下用ssh控制 linux 服务器
- 职通未来 The Next One——赴一场不一样的招聘会
- 数据类型及其表现形式