第十四届蓝桥杯大赛B组 JAVA 蜗牛 (递归剪枝)

news2024/12/21 12:41:12

题目描述:

这天,一只蜗牛来到了二维坐标系的原点。 在 x 轴上长有 n 根竹竿。它们平行于 y 轴,底部纵坐标为 0,横坐标分别为 x1, x2,
…, xn。竹竿的高度均为无限高,宽度可忽略。蜗牛想要从原点走到第 n 个竹竿的底部也就是坐标 (xn, 0)。它只能在 x
轴上或者竹竿上爬行,在 x 轴上爬行速度为 1 单位每秒;由于受到引力影响,蜗牛在竹竿上向上和向下爬行的速度分别为 0.7 单位每秒和
1.3 单位每秒。 为了快速到达目的地,它施展了魔法,在第 i 和 i + 1 根竹竿之间建立了传送门(0 < i < n),如果蜗牛位于第 i 根竹竿的高度为 ai 的位置 (xi , ai),就可以瞬间到达第 i + 1 根竹竿的高度为 bi+1 的位置 (xi+1,
bi+1),请计算蜗牛最少需要多少秒才能到达目的地。 输入格式 输入共 1 + n 行,第一行为一个正整数 n; 第二行为 n 个正整数
x1, x2, . . . , xn; 后面 n − 1 行,每行两个正整数 ai , bi+1。

输出格式:

输出共一行,一个浮点数表示答案(四舍五入保留两位小数)。

样例输入:

3
1 10 11
1 1
2 1

样例输出:

4.20

提示

蜗牛路线:
(0, 0) → (1, 0) → (1, 1) → (10, 1) → (10, 0) → (11, 0),花费时间为 1+1/0.7+0+1/1.3+1 ≈ 4.20

对于 20% 的数据,保证 n ≤ 15;
对于 100% 的数据,保证 n ≤ 10^5,ai , bi ≤ 10^4,xi ≤ 10^9。

解题思路:

动态规划问题,典型看解析会,自己解就蒙der

分析问题本质,蜗牛由一个杆子到达另一个杆子,要么从本竿的起点出发或本竿的传送点出发,那么问题的核心在于确保到由初始原点到达本竿起点,和到达本竿的传送点必须是最优解

整个示例过程的递归图,以及筛选过程如下:

在这里插入图片描述
a2是第二个竹竿的起点o->a1->a2o->b1->a2的最终效果一样,都是到达第二个竹竿起点,所以保留时间最少的那个即可,同理保留到b2时间最少的那个即可,这便是筛选剪枝

筛选递推公式:

设 x1 表示从起始位置到当前在竹竿底部所需要的最短时间
设 x2 表示从起始位置到当前到达竹竿传送门起点位置的最短时间
则有
x1 = min(两根竹竿的距离差 + x1, x2 + 上一个门终点高度 / 1.3)
x2 = min(两根竹竿的距离差 + x1 + 当前门起点高度 / 0.7, 上一个门终点到当前门所需要的时间 + x2)
最后的目标是遍历到终点的 x1

剪枝后的效果:
在这里插入图片描述

代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
         Scanner sc = new Scanner(System.in);
         int n = sc.nextInt();  // 第一行
         int x[] = new int[n + 1];  // x轴
         for(int i = 1; i <= n; i ++) x[i] = sc.nextInt();
         
         if(n == 1) {  // 只有一个竹竿
        	 System.out.printf("%.2f", (double)x[1]);
        	 return;
         }
         
         int door[][] = new int [n][2];  // 存坐标
         for(int i = 1; i < n; i ++) { 
        	 door[i][0] = sc.nextInt();
        	 door[i][1] = sc.nextInt();
         }
         
         double x1 = x[1], x2 = door[1][0] / 0.7 + x[1];  // 初始化x1,x2
         for(int i = 2; i <= n; i ++) {  // 开始遍历
        	 int d = x[i] - x[i - 1];
        	 double y1 = Math.min(d + x1, x2 + door[i - 1][1] / 1.3);  //先算到达底部
        	 if(i == n) {  // 如果已经是最后一个竹竿
        		 System.out.printf("%.2f", y1);
        		 return;
        	 }
        	 // 要考虑到达的本竹竿的传送点位置和由上一个竹竿传送过来的位置之间关系
        	 x2 = Math.min(d + x1 + door[i][0] / 0.7, x2 + (door[i][0] > door[i - 1][1] ? (door[i][0] - door[i - 1][1]) / 0.7 : (door[i - 1][1] - door[i][0]) / 1.3));
        	 x1 = y1;
         }
    }
}

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

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

相关文章

css样式元素的相对定位,绝对定位,固定定位等元素定位运用技巧详解

文章目录 1.相对定位 relative2.绝对定位 absolute3.固定定位4.display 转换元素5.float浮动6.float产生内容塌陷问题7.overflow CSS样式学习宝典&#xff0c;关注点赞加收藏&#xff0c;防止迷路哦 在CSS中关于定位的内容是&#xff1a;position:relative | absolute | static…

消防主机报故障时发出故障及原因及解决办法!

本文以青鸟消防JBF-11SF为例。 其他型号或品牌的消防主机也可参考。 开机前&#xff0c;必须先测量系统接线的绝缘电阻&#xff0c;确保各绝缘电阻满足以下要求&#xff1a; 1&#xff09;空载时各电路信号线之间的绝缘值应大于5K欧姆。 2&#xff09;正常天气条件下&#x…

C++:函数模板整理

函数模板: 找到函数相同的实现思路&#xff0c;区别于函数的参数类型。 使用函数模板使得函数可容纳不同类型的参数实现函数功能&#xff0c;而不是当类型不同时便编译大量类型不同的函数&#xff0c;产生大量重复代码和内存占用 函数模板格式&#xff1a; template<typ…

基于ARIMA+SARIMA的航空公司 RPM 时间序列预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

C++入门全集(4):类与对象【下】

一、再谈构造函数 1.1 构造函数体内赋值 我们知道&#xff0c;在创建对象时&#xff0c;编译器会自动调用构造函数给对象中的各个成员变量一个合适的初始值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _yea…

leetcode 长度最小的子数组

在本题中&#xff0c;我们可以知道&#xff0c;是要求数组中组成和为target的最小子数组的长度。所以&#xff0c;我们肯定可以想到用两层for循环进行遍历&#xff0c;然后枚举所有的结果进行挑选&#xff0c;但这样时间复杂度过高。 我们可以采用滑动窗口&#xff0c;其实就是…

网络加速CDN详细介绍

1、为什么要有网络加速 互联网从逻辑上看是一张大网&#xff0c;但实际上是由许多小网络组成的&#xff0c;这其中就有小网络“互连互通”的问题&#xff0c;典型的就是各个电信运营商的网络&#xff0c;比如国内的电信、联通、移动三大家。 这些小网络内部的沟通很顺畅&#…

c++之通讯录管理系统

1&#xff0c;系统需求 通讯录是一个记录亲人&#xff0c;好友信息的工具 系统中需要实现的功能如下&#xff1a; 1&#xff0c;添加联系人&#xff1a;向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;联系电话&#…

计算机网络-第2章 物理层

本章内容&#xff1a;物理层和数据通信的概念、传输媒体特点&#xff08;不属于物理层&#xff09;、信道复用、数字传输系统、宽带接入 2.1-2.2 物理层和数据通信的概念 物理层解决的问题&#xff1a;如何在传输媒体上传输数据比特流&#xff0c;屏蔽掉传输媒体和通信手段的差…

Java:三种代理模式示例

什么是代理模式&#xff1f; 代理&#xff08;Proxy&#xff09;是一种设计模式&#xff0c;为其他对象提供一种代理以控制对这个对象的访问。 代理模式的组成 抽象角色&#xff1a;通过接口或抽象类声明真实角色实现的业务方法。代理角色&#xff1a;实现抽象角色&#xff…

kibana自动补全功能失效的几个原因

文章目录 不能自动补全index&#xff1f;不能自动补全field&#xff1f; 不能自动补全index&#xff1f; 当用户在 kibana 的 Dev Tools 页面手写查询时&#xff0c;理应可以自动补全 index 的名称&#xff0c;如下图&#xff1a; 如果不能自动补全&#xff0c;则点击 Settin…

【网站项目】295演唱会购票系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

在线绘图利器:支持在线使用的电脑画图软件推荐!

计算机绘图软件是现代设计师和创作者必不可少的工具之一。伴随着技术的不断发展&#xff0c;越来越多的在线计算机绘图软件应运而生&#xff0c;为用户提供了更加便捷、高效的创作方法。对初学者而言&#xff0c;选择一款易于使用、功能强大的计算机绘图软件至关重要。本文将介…

Tomcat服务部署优化

目录 一.Tomcat的基本内容 1.概念 2.构成 &#xff08;1&#xff09;web容器 &#xff08;2&#xff09;servlet容器&#xff08;catalina&#xff09; &#xff08;3&#xff09;JSP容器 3.Tomcat顶层架构 &#xff08;1&#xff09;Tomcat中最顶层的容器是Server&…

DCFL: for Oriented Tiny Object Detection

文章目录 AbstractIntroductionContributionRelated Work定向目标检测微小目标检测多尺度学习标签分配上下文信息特征增强MethodOverview动态先验Coarse Prior MatchingFiner Dynamic Posterior MatchingAblation StudyAnalysis不平衡问题的调解可视化速度Conclusionhh 源代码 …

麒麟KYLINSOS服务器操作系统SP3安装

原文链接&#xff1a;安装麒麟服务器操作系统V10 SP3 在当今的IT环境中&#xff0c;内网仓库的部署对于确保网络安全、加快本地访问速度以及保持软件包的一致性至关重要。特别是对于企业和组织而言&#xff0c;内网仓库可以极大地提升工作效率和系统稳定性。今天&#xff0c;我…

ArmSoM Rockchip系列产品 通用教程 之 CAN 使用

CAN 使用 1. CAN 简介 CAN (controller Area Network)&#xff1a;控制器局域网络总线&#xff0c;是一种有效支持分布式控制或实时控制的串行通信网络。 目前世界上绝大多数汽车制造厂商都采用CAN总线来实现汽车内部控制系统之间的数据通信。 RK3568/RK3588的CAN驱动文件&a…

Effective objective-c-- 内存管理

Effective objective-c-- 内存管理 前言理解引用计数引用计数工作原理属性存取方法中的内存管理自动释放池保留环要点 以ARC简化引用计数使用ARC时必须遵循的方法和命名规则变量的内存管理语义ARC如何清理实例变量覆写内存管理方法要点 在dealloc方法中只释放引用并解除监听要点…

品牌与时间函数:在时间的长河中铸造品牌

品牌推广是一个与时间紧密相连的复杂过程。时间不仅是品牌推广的见证者&#xff0c;更是其推动者和塑造者。迅腾文化深刻理解品牌推广与时间之间的微妙关系&#xff0c;提出的“显”的原则&#xff0c;旨在通过巧妙的策略&#xff0c;使品牌在时间的流转中逐渐显现出其特别的魅…

Less is More: Generating Grounded Navigation Instructions from Landmarks

摘要 我们研究根据室内路线捕获的 360 图像自动生成导航指令。现有的生成器视觉基础较差&#xff0c;导致它们依赖语言先验并对物体产生幻觉。我们的 MARKY-MT5 系统通过关注视觉地标来解决这个问题&#xff1b;它包括第一级地标检测器和第二级生成器——多模式、多语言、多任…