问题描述

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

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

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

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

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

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

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

没有输入。
输出

输出一个整数。
提示

把答案放在输出语句中输出,例如C/C++语言可以用printf或cout。
注意:需要输出的是一个整数,不要输出任何多余内容。

思路

容易想到二分思路:不断二分范围,取中点,测验是否会摔坏,然后缩小一半范围,继续尝试,很显然,答案为logN(2为底)但是很显然,二分得出的答案是不对的。
这就有意思了,我们分析可以得出两种情况:

**情况1)**假设我们第一部手机在i层摔坏了,然后最坏情况还要试多少次?这时我们还剩一部手机,所以只敢一层一层试,最坏情况要试到i-1层,共试了i次。

**情况2)**假设我们第一部手机在i层试了,但是没摔坏,然后最坏情况还要试多少次?(这时发现算情况2时依旧是相似的问题,确定了可以用递归来解。)

**最优解(最小值)**是决策后两种情况的最差情况(最大值),我们的本能感觉应该就是让最差情况好一点,让最好情况差一点,这样比较接近正确答案。比如两部手机,一百层,我们可以在50层摔,没坏,这一次就很赚,我们没摔坏手机还把范围缩小了50层。如果坏了,就比较坑了,我们要从1试到50。虽然可能缩小一半,但是最坏情况次数太多,所以肯定要从某个低于五十的层开始尝试。

归纳表达式

假设我们的楼一共n层,我们的i可以取1-n任意值,有很多种可能的决策,我们的最小值设为f(n,k),n代表楼高(范围为1-100或101-200其实都一样),k代表手机数.

我们假设的决策是在第i楼扔

对于情况一,手机少了一部,并且我们确定了范围,一定在第i楼以下,所以手机-1,层数为i-1,这时f(n,k)=f(i-1,k-1).+1

对于情况二,手机没少,并且我们确定了范围,一定在第i楼之上,所以手机数不变,而层数-i层,这时f(n,k)=f(n-i,k).+1

归纳出

f(n,k)=min( max(f(i-1,k-1) ,f(n-i,k) ) i取1-n任意数 )+1

简单总结:怎么确定第一个手机在哪扔?每层都试试,哪层的最坏情况(max)最好(min),就去哪层扔。

动态规划思路:
如何解题,也就是如何写出来代码,我们接着往下。

这个动态规划到底怎么写?

**1.**我们摔手机测试按着运气再差的心态来说是吧!摔3次,恰巧都坏了呢?
**2.**令dp[i][j]为i层j个手机的最多(最优)测试次数。第一摔如何摔?每一层都可以作为第一摔。
**3.**设第一摔选在了第k层。
第一摔只能有两种结果:碎或者不碎
(1)碎

如果碎了就让他们碎了都-1,楼层和手机,上面的层不再考虑,只需要在下面的层测试,手机少了一部,即 dp[k-1][j-1];
(2)不碎

如果没碎,下面的层不再考虑,只需要在上面的层测试,手机还是那么多,即 dp[i-k][j]
通过上面的分析:
因此,我们得出从k层开始摔,运气最坏需要 max(dp[k-1][j-1], dp[i-k][j]) + 1 次测试
k有多种选择,因此 最好的结果为: dp[i][j] = min( max(dp[k-1][j-1], dp[i-k][j]) + 1 )
所以存在最优解,故我们采取最优策略,求子问题的min即可,而碎或者未碎这种事情会存在最坏情况,故我们采用最坏情况的值,求子决策的max即可。
(思路来自博客。博客中大佬众多,在此抱拳仰望!互相学习!)

代码:

#include <stdio.h>
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
int main ()
{int dp[1001][4];for (int n = 1; n <=3; n++)//它的手机个数for (int i = 1; i <=1000; i++) //楼层数{dp[i][n]=dp[i-1][n]+1;// 当前最优次数[楼层][2]=1+当前最优次数[楼层-1][2];//最坏情况for (int j = 1; j <i&&n>1; j++)dp[i][n]=MIN(dp[i][n],MAX(dp[j-1][n-1], dp[i-j][n])+1);//找最优解}printf("%d",dp[1000][3]);return 0;
}

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

  1. 蓝桥杯——第九届C语言B组第五题:x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机;

    x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机; (1)对于这道题摔手机测试题呢!也就是求它的最优解;我一开始想到这道题的解法呢!是二分解,但你往里面具体的深入的看题,它是一个巨 ...

  2. 蓝桥杯真题 18省Ca4-第几个幸运数 问题描述 到x星球旅行的游客都被发给一个整数,作为游客编号。 x星的国王有个怪癖,他只喜欢数字3,5和7。 国王规定,游客的编号如果只含有因子:3,5,

    问题描述 到x星球旅行的游客都被发给一个整数,作为游客编号. x星的国王有个怪癖,他只喜欢数字3,5和7. 国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品. 我们来看前10个幸运数 ...

  3. 蓝桥杯真题 18国1-换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种。 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱。 小明有点强迫症,

    问题描述 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换出的 ...

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

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

  5. 第九届蓝桥杯真题解析JavaC组

    第九届蓝桥杯真题解析JavaC组 文章目录 ***第九届蓝桥杯真题解析JavaC组*** 前言 A.哪天回家 B.猴子分香蕉 C.字母阵列 D.第几个幸运数 E.书号验证 F.打印大X G.缩位求和 ...

  6. 蓝桥杯真题及答案JavaB组(第七届~第十一届)

    1.十一届 1.1.解密(结果填空`5) Q: 小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的字符 Tc.下表给出了字符变换的规则: 在这里插入图片描述 例如,将字符串 YeRi ...

  7. python解答蓝桥杯真题1 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。。。

    python解答蓝桥杯真题1 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记... 题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月 ...

  8. 蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心算法、差分与前缀和

    注意:加了题目链接 目录 注意:加了题目链接 一.打表模拟法 介绍 1. 算式问题 题目描述 解析与代码演示 2. 求值 题目描述 解析与代码演示 3. 既约分数 题目描述 解析与代码演示 4. 天干 ...

  9. 蓝桥杯真题2017-2021

    刷完近几年真题,感觉理解完之后,拿奖问题不大,本人这次获得2022年蓝桥杯javaB组省一,以下是历年javaB组省赛题目. 文章目录 2017年真题 一.购物单 二.纸牌三角形 三.承压计算 四.魔 ...

最新文章

  1. 2021年大数据ELK(九):使用VSCode测试分词器
  2. 用python画烟花-python实现浪漫的烟花秀
  3. mysql设置字段为空字符串_mysql数据类型字段插入空字符串自动填充为0报错
  4. 使用ng-container标签在SAP Spartacus里插入UI
  5. c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...
  6. SEO之Google--PageRank优化剖析(一)
  7. 验证邮箱是否合法php,验证邮箱是否合法
  8. 在线教学质量评价系统java web_基于JavaWeb的教师教学质量评价系统
  9. c# gerber文件读取_PCB加工中Gerber文件的解析及其图形绘制和分割的研究
  10. HTML+CSS静态页面`西安旅游网站设计——西安旅游(7页) 大学生旅游网页作品 出行网页设计作业模板 学生游玩网页制作源代码下载
  11. 接口请求 Provisional headers are shown
  12. python 天天向上求几天数_Python十题(第2课)
  13. Total Uninstall 6安装使用
  14. (四)MySQL员工部门查询
  15. YD2606A、CSC7206A
  16. 前端vue/js刷新浏览器页面方法-案例
  17. 新郑计算机培训机构排名前十,新郑美术培训中心排名
  18. 寻找突破口语学习技巧
  19. 轻信别人可以“包装”,规避限购政策购房,会有那些后果?
  20. 谷歌翻译插件imtranslator安装使用步骤

热门文章

  1. 如何使用中国知网查询文献,并自动生成参考文献格式引文?
  2. Js(二)SyntaxError Cannot use import statement outside a module
  3. 电路基础学习笔记5:实验验证电压源与电流源的等效变换
  4. 重庆大学计算机学院郭松涛,C.-C.Jay Kuo教授访问重大计算机学院
  5. 电位计,电子尺0-5欧姆或0-50欧姆转换成电流电压0-10MA/0-10V转换器,隔离器
  6. table表格做一个表头斜线样式
  7. 小程序推广换量经验分享
  8. 2021年需要关注的15大软件测试趋势(一)
  9. html新年礼物,特别的新年礼物 特殊的新年礼物
  10. 生物素PEG叠氮,Biotin-PEG-Azide,N3-PEG-Biotin