蓝桥杯-测试次数

摘要:
行星X的居民脾气不是很好,但幸运的是,他们生气时唯一的反常行为就是扔手机。主要制造商还推出了各种防摔手机。Planet X的质量监督局规定,手机必须通过防摔测试,并通过防摔指数评估,才能上市。如果没有在塔的顶层第n层断裂,则抗跌落指数=n。为了减少测试次数,从每个制造商处抽取三部手机参加测试。测试的塔高为1000层。如果我们总是采用最佳策略,那么在最坏的运气下,我们最多需要测试多少次才能确定手机的抗摔指数?
x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。
各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。
x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。
如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。
特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。
如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n

为了减少测试次数,从每个厂家抽样3部手机参加测试。
某次测试的塔高为1000层,如果我们总是采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?
请填写这个最多测试次数

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

这题有两种解题思路:

1.数学逻辑推导

看懂后就是手算了:https://www.cnblogs.com/wizarderror/p/10548253.html

2.动态规划

看到这四个字首先是头皮发麻,快一个星期不写了,当时学的那会被动规弄的死去或来的

 定义状态dp[ind][cnt]:ind层楼,cnt部手机时最坏运气下最少的测试次数

状态转移方程:dp[ind][cnt] = Min( 1 + dp[ind-1][cnt] ,  1 + Max( dp[k-1][cnt-1] ,  dp[ind-k][cnt] ) (1 < k < ind)

注意ind=1、2的时候,k是不存在的,这时候采用最大值 dp[ind-1][cnt]+1 即可,初始化 dp[0][cnt]=0

代码:

#include <bits/stdc++.h>
using namespace std;
int dp[1005][50];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    memset(dp, 0, sizeof(dp));
    for (int i = 1; i <= n; i++)//边界初始化
        dp[i][1]=i;
     
    for (int cnt = 2; cnt<= m; cnt++) {
        for (int ind = 1; ind <= n; ind++) {
            dp[ind][cnt] = 1+dp[ind-1][cnt];//最坏的情况
            for (int k = 2; k < ind; k++)
                dp[ind][cnt] = min(dp[ind][cnt],1+max(dp[k-1][cnt-1],dp[ind-k][cnt]));
        }
    }
    printf("%d
",dp[n][m]);
    
    return 0;
}

以下内容帮助理解:

从k=2扔到k=ind-1的这个过程是为了检查在这些楼层扔一部手机是否能根据历史数据得到更优的结果; (我们已经计算过手机 cnt-1 部的所有情况和手机 cnt 部楼层数低于当前层数的所有数据) 最坏情况(也就是最大值)必然是确定ind-1层所用手机数+1; 先求得最大值后,再设定k在 2~ind-1 之间查找是否存在可能的最小值; 尝试在 2~ind-1 楼层扔手机会将产生两种可能,一种是手机破碎,那么还需要确定的就是手机少一部(cnt-1)确定 k-1 层数; 另一种自然是手机完好,那么还需要用 cnt 部手机确定 ind-k 层数,这两种情况所需的历史值我们都已经计算过了! 这体现的是不断通过选择最优分块的思路,一层一层确定~~

参考自:https://blog.csdn.net/belous_zxy/article/details/80543276

免责声明:文章转载自《蓝桥杯-测试次数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Thinkphp的Volist标签javascript调用WebService Hello World下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【蓝桥杯训练】第二天1259、1260

1259 [蓝桥杯2015初赛]三羊献瑞 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。输出请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。 注意 答案唯一,相同的汉字代表相同的数字,不同的汉字代表不同的数字 算法 下面说的进...

xamarin.forms uwp app部署到手机移动设备进行测试,真机调试(device portal方式部署)

最近学习xamarin。刚好手上有一个lumia 930.所以试一试把uwp app部署到手机上,并真机调试一把。 目前环境: 1.开发pc电脑是win10,版本1607.加入了insider,所以版本比较高。 2.手机是 lumia 930.版本 1511,手机未加入insider,所以是稳定版本,比较低。(device-portal方式部署要求系统版...

蓝桥杯训练 | 递归与递推 | 01

目录 递归实现指数型枚举 递归实现排列型枚举 简单斐波那契 费解的开关 递归实现组合型枚举 带分数 飞行员兄弟 翻硬币 递归实现指数型枚举 #include<iostream> using namespace std; const int N=15+10; bool st[N]; int n; void dfs(int u)...

怎么在iPhone手机安装测试包,并且调试APP内的H5应用

安装步骤 电脑下载iTools,以Mac平台为例。iTools下载地址 使用数据线将Mac与iPhone链接 选中iTools【应用】一栏,点击下面安装按钮后,选择需要安装的ipa包即可 调试步骤 在Mac中,打开Safari浏览器,打开h5启动的项目,比如http://localhost:3000/test Safari浏览器 -> 偏...

手机功耗测试

极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 本篇文章主要介绍 Android 开发中的部分 功耗 知识点,通过阅读本篇文章,您将收获以下内容: 1.测试功耗手机配置 2.飞行模式待机功耗 3.单SIM卡实网待机功耗 4.双SIM卡实网待机功耗 5.单SIM卡实网待机 + 数据连...

蓝桥杯错误数据——运行超时(末尾文件结束)

一开始的代码,运行超时 #include<iostream>#include<cmath>#include<cstdio>#include<algorithm>#include<string>#include<cstring> using namespacestd; int a[105...