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

题目描述:

这天,一只蜗牛来到了二维坐标系的原点。 在 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;
         }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu20.04使用XRDP安装原生远程桌面

Ubuntu20.04使用XRDP安装原生远程桌面 1.安装gnome桌面 # 如果没有更新过源缓存&#xff0c;先更新一下 sudo apt update# 安装gnome桌面 # 可选参数 --no-install-recommends&#xff0c;不安装推荐组件&#xff0c;减少安装时间和空间占用 sudo apt install ubuntu-desktop…

Docker基础教程 - 1 Docker简介

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 1 Docker简介 Docker是一个强大的容器化平台&#xff0c;让你能够更轻松地构建、部署和运行应用程序。 下面我们来学习 Docker。 1.1 Docker是什么 1 现在遇到的问题 每次部署一台服务器&…

Apache JMeter 5.6.3 安装

源码下载 curl -O https://dlcdn.apache.org//jmeter/source/apache-jmeter-5.6.3_src.zipJMeter 下载 curl -O https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.zipjmeter.properties 里 设置中文 windows系统上解压&#xff0c;双击jmeter.bat 启动 执行参…

618快递准点到达,别忘了感谢它!

进入6月以来&#xff0c;全国快递日均业务量飞速上涨。 虽然618大促是电商的主场&#xff0c;但作为不可或缺的物流环节&#xff0c;为了这场年中大考&#xff0c;快递企业在此期间也使尽浑身解数&#xff0c;竞相比拼配送速度。那么&#xff0c;为了更快的时效&#xff0c;快递…

【基于Matlab GUI的语音降噪系统设计】

客户不要了&#xff0c;挂网上吧&#xff0c;有需要自行下载~ 赚点辛苦费 ** 功能实现: ** 1、导入音频文件/录入音频&#xff0c;能实现播放功能。 2、对导入/录入的音频信号进行时域和频域分析&#xff0c;并制图。 3、可在导入/录入的音频信号上加入噪声&#xff0c;并能够播…

零基础手把手教你创建微信小程序(十六)·事件传参·data-*自定义数据

事件传参&#xff1a;在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参。 在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在事件处理函数中获取这些自定义数据,从而完成业务逻辑的开发。 在组件上通过data-"的方式定义需要传递的数据,其…

被通知回老家当农场主,没有经验的我用FarmOS系统抢先体验了一把!

网管小贾 / sysadm.cc 公司小Z过年回来就变得有点魔怔&#xff0c;工作积极性不高&#xff0c;天天话里话外总是唠叨着要辞职回老家种地&#xff01; 老板让我去劝劝他&#xff0c;强调务必对齐颗粒度&#xff0c;说劝好了给我记上一功。 我也不知道之前的那些功啥时候能变现…

【动态规划专栏】

动态规划基础知识 概念 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;&#xff1a;用来解决最优化问题的算法思想。 动态规划是分治思想的延伸&#xff0c;通俗一点来说就是大事化小&#xff0c;小事化无的艺术。 一般来说&#xff0c;…

OpenAI钦点的“机器人界OpenAI”来了:成立不到两年估值破26亿美元

OpenAI们正在今年因AI而再次火热无比的机器人领域“复刻”一个OpenAI。 2024年2月23日&#xff0c;OpenAI、微软、贝佐斯风投、英伟达等总计18位投资公司向一家机器人公司注资了6.75亿美元&#xff0c;这家公司就是Figure AI。 Figure AI成立于2022年&#xff0c;两年不到经过…

(已解决)Unicode高位码点emoji表情无法解析

问题描述 我在制作游戏论坛项目&#xff0c;希望制作一个表情库&#xff0c;我参考了菜鸟的emoji手册&#xff0c;并且使fromCharCode函数来进行字符串转换&#xff0c;但是经过我的测试&#xff0c;对于超过5位数的高位码点&#xff0c;无法正常解析。 源码&#xff1a; &l…

WiFi模块引领零售数字化转型:智能零售体验再定义

随着科技的不断发展&#xff0c;零售业正迎来一场数字化转型的浪潮。在这个变革过程中&#xff0c;WiFi模块成为零售业中的关键技术&#xff0c;为商家提供了丰富的数字化工具&#xff0c;打造了更智能、便捷、个性化的零售体验。本文将深入探讨WiFi模块在零售数字化转型中的关…

学习使用paddle来构造hrnet网络模型

1、首先阅读了hrnet的网络结构分析&#xff0c;了解到了网络构造如下&#xff1a; 参考博文姿态估计之2D人体姿态估计 - &#xff08;HRNet&#xff09;Deep High-Resolution Representation Learning for Human Pose Estimation&#xff08;多家综合&#xff09;-CSDN博客 最…

Python的With...As 语句:优雅管理资源的技术探索【第116篇—With...As 语句】

Python的With…As 语句&#xff1a;优雅管理资源的技术探索 在Python编程中&#xff0c;with...as语句是一项强大而优雅的功能&#xff0c;用于管理资源&#xff0c;如文件、网络连接、数据库连接等。本文将深入介绍with...as语句的用法、其工作原理&#xff0c;并通过代码示例…

光子嫩肤仪面罩控制器PCB电路中升压恒流芯片FP7208的应用

护肤已经成为现代人日常生活中不可或缺的一部分&#xff0c;尤其对于追求美丽肌肤的人来说&#xff0c;寻找一款适合自己的护肤利器至关重要。 光子嫩肤仪作为一种高科技美容仪器&#xff0c;受到越来越多人的追捧。其中&#xff0c;FP7208LED升压驱动IC作为其核心部件之一&am…

TQ15EG开发板教程:创建运行petalinux2019.1

工程网盘链接&#xff1a;https://pan.baidu.com/s/1vFRpzmbifXt7GypU9aKjeg 提取码&#xff1a;0ylh 首先需要使用与petalinux相同版本的vivado创建工程&#xff0c;与之前不同的是在创建硬件设计时需要勾选上添加bit文件&#xff0c;所以要在生成bit文件之后再创建硬件设计…

谷粒商城【成神路】-【8】——商品上架

目录 1.数据模型封装 1.es数据模型 2.将es数据模型封装为JAVA bean 3.根据前端发送请求,编写controller 2.模型实现 2.1服务controller 2.2服务service 2.3服务远程调用接口 2.4检索服务controller 2.5检索服务保存到es 2.6库存查询服务 1.数据模型封装 1.es数据模…

银河麒麟之Workstation安装

一、VMware Workstation简介 VMware Workstation是一款由VMware公司开发的虚拟化软件&#xff0c;它允许用户在一台物理计算机上运行多个操作系统&#xff0c;并在每个操作系统中运行多个虚拟机。VMware Workstation提供了一个可视化的用户界面&#xff0c;使用户可以轻松创建、…

纵行科技荣登“中国物联网企业投资价值50强”、“中国物联网行业创新产品榜”

近日&#xff0c;由深圳市物联传媒有限公司、AIoT星图研究院、IOTE组委会、深圳市物联网产业协会主办的“2023‘物联之星’中国物联网行业年度榜单”评选结果正式公布。厦门纵行信息科技有限公司&#xff08;以下简称“纵行科技”&#xff09;最终从500多家参评企业中脱颖而出&…

数据库-ODBC操作

一、ODBC 数据源配置 打开ODBC数据源管理器&#xff1a; 在Windows搜索栏中键入“ODBC数据源”并选择“ODBC数据源(64位)”&#xff08;如果你的系统是64位的&#xff09;。如果你的系统是32位的&#xff0c;你可以选择“ODBC数据源(32位)”。或者&#xff0c;你可以在控制面…

使用DockerFile构建Tomcat镜像

1、准备镜像文件tomcat压缩包&#xff0c;jdk的压缩包 tomcat链接&#xff1a;https://pan.baidu.com/s/1Xpecb-BSGR2sdxSL7FDtBw?pwd1234 提取码&#xff1a;1234 jdk链接&#xff1a;https://pan.baidu.com/s/1mQHInn27j1I9uuuicBsyAA?pwd1234 提取码&#xff1a;1234 …