蓝桥杯java组 测试次数

题目描述

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

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

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

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

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

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

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


代码

/**  * @author Fancier  * @version 1.0  * @description: 测试次数  * @date 2024/3/11 9:08  */  
public class Main {  public static void main(String[] args) {  int n, m;  n = 1000;  m = 3;  int[][] dp = new int[n + 1][m + 1];  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] = dp[i][j - 1];  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[n][m]);  }  
}}  
}

题解

思考

如果有3台手机从有1000层楼, 那从哪一层开始最合适呢
假设, 是从第k层, 在k层楼开始有两种状态 摔坏了 和 没摔坏
如过摔坏了, 应该从第几层开始呢? 这种情况相当于有两台手机有k - 1层
没摔坏又应该从第几层开始呢? 这种情况相当于有3台手机有 1000 - k层
应为运气差所以我们只会选择到这两种情况种对应测试次数多的一种(情况A)

这样我们又可以从带着同样的思维, 想情况A该从哪一层开始
如此循环, 知道触碰到边界情况为止 只有一台手机的情况 开始

说到这一步了, 那就很容易想到用动态规划来做了

dp[i][j] 对应有j台手机, 有i层的情况

状态转移方程
dp[i][j] = Math.max(dp[k - 1][j - 1], dp[i - k][j]) + 1;
如何确定这个k呢

遍历 找到使dp[i][j] 最小的k

dp[i][j] = Math.min(dp[i][j], Math.max(dp[k - 1][n - k], dp[i - k][j]) + 1);
填表顺序

从左往右, 从上到下

初始化

只有一台手机的情况, 我们只能一层一层的测试, 所以最坏情况就是楼层总数

for (int i = 1; i <= n; i++) {  dp[i][1] = i;  
}

具体代码参上

好的!本次分享到这就结束了
如果对铁汁你有帮助的话,记得点赞👍+收藏⭐️+关注➕
我在这先行拜谢了:)

其它解法推荐
o(1)时间复杂度的解法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式一 ---单例设计模式(动力节点,JavaSE基础)

设计模式 1.什么是设计模式&#xff1f; 2.设计模式的分类 单例设计模式就是GoF模式中的一种。 3.GoF设计模式的分类&#xff1a; 单例设计模式&#xff1a; 顾名思义&#xff1a;单个实例的设计模式&#xff01;

Arco 部署项目后部分样式未生效

文章目录 问题分析 问题 在更改 arco 的原始样式后&#xff0c;发现部分样式并未被更改 分析 如下所示&#xff0c;通过元素查看器可以看到原生的绑定的 class 类名和样式 而我将整个的设置了的样式做了替换 :deep(.arco-menu-light.arco-menu-horizontal .arco-menu-ite…

【力扣精选算法100道】——二进制求和

LCR 002. 二进制求和 - 力扣&#xff08;LeetCode&#xff09; 目录 &#x1f388;了解题意 &#x1f388;算法分析 &#x1f6a9;cur1>0 &#x1f6a9;cur2>0 &#x1f6a9;t &#x1f388;实现代码 &#x1f388;了解题意 遵循二进制加法法则&#xff0c;如果俩…

跨阻放大器(TIA)的输入输出阻抗的定义、分析和影响因素

跨阻放大器&#xff08;TIA&#xff09;的输入输出阻抗的定义、分析和影响因素 跨阻放大器&#xff08;Transimpedance Amplifier&#xff0c;简称TIA&#xff09;是一种常用于将电流信号转换为电压信号的放大器。在TIA电路中&#xff0c;输入阻抗是指输入端对电流信号的响应能…

接入DDoS高防后如何设置源站保护

业务接入DDoS高防后&#xff0c;您应当尽量避免源站IP暴露&#xff0c;以防止攻击者绕过DDoS高防直接攻击源站。如果源站IP有暴露风险&#xff0c;建议您设置源站保护&#xff0c;例如只允许DDoS高防回源IP的入方向流量&#xff0c;提升业务可用性。本文九河云介绍不同网络架构…

48. 【Linux教程】yum 软件包管理

本小节介绍如何在 Linux 系统中使用 yum 命令软件管理。 1.yum 简介 yum 是 Red Hat 软件包管理器&#xff0c;它能够查询有关可用软件包的信息&#xff0c;从存储库获取软件包&#xff0c;安装和卸载软件包&#xff0c;以及将整个系统更新到最新的可用版本。yum 在更新&#…

酷开会员 | 和好朋友一起玩酷开系统体感游戏

春天已经到来&#xff0c;闲暇时间做些什么好呢&#xff1f;那就玩会游戏吧&#xff01;打开酷开系统&#xff0c;在体感游戏中&#xff0c;寻找一款自己喜欢的运动&#xff0c;和家人一起运动起来吧&#xff01; 酷开系统是一款非常贴心、全面的智能电视操作系统。它拥有丰富…

介绍一下c++中的多态

c中实现多态分为两种方式&#xff0c;分别是静态多态&#xff08;也叫编译时多态&#xff09;&#xff0c;和动态多态(也叫运行时多态) 静态多态: 是在编译时就确定了函数的类型和会调用哪个函数&#xff0c;这种方式叫做静态连接或者早绑定&#xff0c;静态多态主要实现手段…

springboot/ssm航班进出港管理系统Java航班信息记录管理系统web

springboot/ssm航班进出港管理系统Java航班信息记录管理系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1…

Math类中的方法总结

Math.min(int a, int b) 或 Math.min(double a, double b)&#xff1a;返回两个值中的最小值。 Math.abs(int a) 或 Math.abs(double a)&#xff1a;返回值的绝对值。 Math.pow(double a, double b)&#xff1a;返回a的b次幂的结果。 Math.sqrt(double a)&#xff1a;返回a的平…

veeam备份基础

veeam的安装 将文件动态连接文件复制到veeam的安装目录中&#xff0c;替换掉新的文件 重新启动服务 为veeam添加证书 为veeam添加存储 其他 第一次完整备份时间会比较久 备份预览&#xff0c;transferred和processing date的区别 transferred后面数据为压缩比

设计模式 — — 代理模式

一、是什么 代理模式&#xff08;Proxy Pattern&#xff09;是为一个对象提供一个代用品或占位符&#xff0c;以便控制对它的 生活场景&#xff1a; 租房、买房&#xff0c;比如链家等房屋中介机构&#xff0c;起到的作用就是代理 二、使用 const proxy new Proxy(target, …

基于SAMD21G17D的触摸滑条USB HID设备实现及控制PC音量的功能开发(USB HID+MPLAB)

https://www.bilibili.com/video/BV1dr421H7yPTOC &#x1f449; 【2024年寒假练】基于SAMD21G17D的触摸滑条USB HID控制PC音量快捷键的功能开发 &#x1f449; Github: EmbeddedCamerata/SAMD21_touchbar_usb_hid 项目介绍 本项目基于 Microchip 的 SAMD21 Curiosity Nano 核…

【Python-Pandas】删除带有NaN的行

data.Frame删除带有NaN的行 sample_raw.dropna(axis0, inplaceTrue)axis &#xff1a;为0&#xff0c;表示行。 inplace &#xff1a;为True&#xff0c;表示覆盖原数据。

深入理解快速排序

一、快速排序 快速排序是冒泡排序的一种改进算法&#xff0c;相比于冒泡排序效率更优。 算法过程分析&#xff1a; 通过采用分治策略&#xff0c;围绕一个 x 将原始数组划分为两个子数组&#xff0c;使得前一个子数组的元素≤ x ≤ 后一个子数组元素&#xff0c;对两个子数组进…

C语言练习题day3

编写一个程序给定两个数字(每个数字均为2位数),根据要求获得新数 并完成打印 新数的千位是第一个数的个位 新数的百位是第一个数的十位 新数的十位是第二个数的十位 新数的个位是第二个数的个位 #include<stdio.h>int main(void…

WebGIS开发0基础必看教程:鹰眼的实现思路

1.背景 鹰眼功能是WebGIS中的一种常见功能&#xff0c;利用一些开源的框架实现起来非常方便。当然&#xff0c;按照博主从底层谈WebGIS这套系列的风格&#xff0c;在这里还是跟大家一起探讨探讨不借助第三方框架开发鹰眼的简单实现思路。 2.鹰眼功能分析 3.实现思路设计 3.1…

C++内存对齐知识点总结

什么是内存对齐 理论上&#xff1a;32位系统&#xff1a;int 4字节&#xff0c;char1字节 现代计算机内存空间都是按照字节划分的。理论上计算机系统对基本类型数据在内存的变量的访问可以从任何地址开始&#xff0c;但是时机的计算机系统对基本类型的数据在内存中存放的位置是…

C语言 - 堆栈二叉树的基础及应用

1.历史 堆栈是为了减少程序内存占用的问题而发明的 机器上电后&#xff0c;所有的变量都需要copy到内存中运行&#xff0c;但是机器的内存大小一直都是比较有限的&#xff0c;所以堆栈和局部变量两个概念被提出来 2.栈 每次手动创建、删除变量非常麻烦&#xff0c;于是…

OpenCV-图像基础处理

目录 1 彩色&#xff08;RGB&#xff09;图像 2 灰度图像 3 黑白图像 1 彩色&#xff08;RGB&#xff09;图像 使用cv2.imread()函数加载RGB图像&#xff1b;使用cv2.split()函数分割颜色通道&#xff1b;将BGR颜色格式转换成RGB颜色格式&#xff1b;使用matplotlib或cv2.i…