第十四届蓝桥杯蜗牛

蜗牛 线性dp

目录

蜗牛 线性dp

先求到达竹竿底部的状态转移方程

求蜗牛到达第i根竹竿的传送门入口的最短时间​编辑


题目链接:蓝桥杯2023年第十四届省赛真题-蜗牛 - C语言网

关键在于建立数组将竹竿上的每个状态量表示出来,并分析出状态转移方程

  
       int tree []  = new int[n];//记录每根竹竿到原点的距离int portal_exit [] = new int[n];//第i个竹竿上传送门出口高度int portal_entrance [] = new int[n];//第i个竹竿上传送门入口的高度double time_bottom [] = new double[n];//到达第i个竹竿底部的最短时间double time_portal [] = new double[n];//到达第i个竹竿传送门入口的最短时间

注意:到达第i个竹竿传送门入口的最短时间也是,蜗牛传送到第i+1根竹竿传送门出口的最短时间

很明显,代码中表示最状态的数组为 time_bottom[i]表示蜗牛从原点到达第i根竹竿的底部用的最短时间

time_portal[i] 表示蜗牛从原点到达第i根竹竿可以传送到第i+1竹竿的传送门入口 a1的最短1时间

我们需要求出time_bottom[i]和time_poratal[i]的状态转移方程

先求到达竹竿底部的状态转移方程

由图可知

到达第i竹竿底部的方法有两种

(1)从前一个竹竿的底部直接爬过来

time_bottom[i]=time_bottom[i-1]+tree[i]-tree[i-1];

ps:tree[i]-tree[i-1]为蜗牛从前一个竹竿爬过来用的时间

(2)从当前竹竿的传送门出口爬下来

到达第i根竹竿底部的时间=蜗牛到达第i根竹竿的传送门出口的时间(即到达第i-1竹竿传送门入口的时间:time_portal[i-1])+ 传送门出口到底部距离/下爬速度

time_bottom[i]=time_portal[i-1]+portal_exit[i]/1.3;

综合(1)(2)得time_bottom[i]得状态转移方程

 time_bottom[i]=Math.min(time_bottom[i-1]+tree[i]-tree[i-1],time_portal[i-1]+portal_exit[i]/1.3)
求蜗牛到达第i根竹竿的传送门入口的最短时间

同样有两种方式

(1)从传送门出口爬到传送门入口

如果传送门出口比传送门入口高那么直接向下爬

到达传送门出口的时间+传送门出口-传送门入口的距离/速度

 time_portal[i]=time_protal[i-1]+(portal_exit[i]-portal_entrance[i])/1.3;

如果传送门出口的高度比入口的低那么就要向上1爬速度为0.7

(2)从底部爬到传送门

 time_portal[i]=time_bottom[i]+portal_entrance[i]/0.7;

综上time_portal[i]的状态转移方程为:(传送门出口比传送门入口高的情况)

 ime_portal[i]=Math.min(time_protal[i-1]+(portal_exit[i]-portal_entrance[i])/1.3,time_bottom[i]+portal_entrance[i]/0.7)

最后我们可以给第1根竹竿的状态初始化

 //第一根竹竿的底部和传送出口最短时间我们可以算出来
  time_bottom[0]=tree[0];//1time_portal[0]=tree[0]+portal_entrance[0】;

第n根竹竿我们要特殊判断一下因为最后一根竹竿没有传送门入口

完整代码

import java.util.Scanner;public class Snail {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int tree []  = new int[n];//记录每根竹竿到原点的距离int portal_exit [] = new int[n];//第i个竹竿上传送门出口高度int portal_entrance [] = new int[n];//第i个竹竿上传送门入口的高度double time_bottom [] = new double[n];//到达第i个竹竿底部的最短时间double time_portal [] = new double[n];//到达第i个竹竿传送门入口的最短时间for (int i=0;i<n;i++){tree[i]=sc.nextInt();}for (int i=0;i<n-1;i++){portal_entrance[i]=sc.nextInt();portal_exit[i+1]=sc.nextInt();}
//第一根竹竿的底部和传送出口最短时间我们可以算出来time_bottom[0]=tree[0];//1time_portal[0]=tree[0]+portal_entrance[0]/0.7;//2.4for (int i=1;i<n;i++){
//            给出结束条件if (i==n-1){
//            从上一根竹竿底部直接到第i根竹竿底部double bottom1 = time_bottom[i-1]+tree[i]-tree[i-1];
//                从第i根竹竿的传送门出口向下爬到底部double bottom2 = time_portal[i-1]+portal_exit[i]/1.3;time_bottom[i]=Math.min(bottom1,bottom2);break;}else{//            从上一根竹竿底部直接到第i根竹竿底部double bottom1 = time_bottom[i-1]+tree[i]-tree[i-1];
//                从第i根竹竿的传送门出口向下爬到底部double bottom2 = time_portal[i-1]+portal_exit[i]/1.3;//3.2
//              计算最短到达第i根竹竿底部的距离time_bottom[i]=Math.min(bottom1,bottom2);//3.2
//                计算到达第i根竹竿传送门入口的最短时间
//                到达传送门入口的第一种方式:从底部爬到入口double time_entrance1=time_bottom[i]+portal_entrance[i]/0.7;
//                 到达传送门入口的第二种方式:从传送门的出口爬到入口double time_entrance2=0;if (portal_entrance[i]>=portal_exit[i]){//如果入口在出口上面,向上爬time_entrance2=time_portal[i-1]+(portal_entrance[i]-portal_exit[i])/0.7;}else {time_entrance2=time_portal[i-1]+(portal_exit[i]-portal_entrance[i])/1.3;}
//                从两种方式中取最短时间time_portal[i]=Math.min(time_entrance1,time_entrance2);}}System.out.printf("%.2f",time_bottom[n-1]);}
}

写下血与泪的教训:时间的数据类型一定要用double不然数据量太大精度不够不能通过。

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

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

相关文章

游泳防水耳机排名,高性价比国际游泳耳机品牌排行榜前十名

随着科技的飞速发展&#xff0c;运动游泳耳机已经成为当代运动时尚和游泳爱好者的必备装备之一。在游泳训练或是户外运动时&#xff0c;一款高性价比的游泳耳机不仅能带给我们高品质的音乐体验&#xff0c;还能有效防水防汗&#xff0c;陪伴我们享受运动带来的乐趣。为了帮助大…

视频素材网站哪个好?推荐几个高清无水印的短视频素材网

小伙伴们&#xff0c;如果你也是短视频的狂热爱好者&#xff0c;想要制作出优质满分的短视频作品&#xff0c;但苦于不知道从哪儿搞来那些高清无水印的素材&#xff0c;那今天你就来对地方啦&#xff01;我这里有几个绝佳的素材网站推荐给你&#xff0c;让你的创作源源不断。 …

Kamailio的SIP服务的性能

官方的性能报告&#xff1a; Kamailio (OpenSER) 1.2.0 - Transaction Module and User Location Performance Tests 如下的提取的性能参数也是基于官方的性能报告&#xff0c;信令走的UDP&#xff0c;作为做系统方案的参照&#xff0c;Kamailio的性能还是非常&#xff0c;非常…

代码学习记录18

随想录日记part18 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.13 主要内容&#xff1a;今天的主要内容是二叉树的第七部分&#xff0c;主要涉及二叉搜索树的最近公共祖先 &#xff1b;二叉搜索树的最近公共祖先&#xff1b;删除二叉搜索树中的节点 。 23…

Java Lambda和方法引用

一、Lambda Lambda表达式&#xff0c;即函数式编程或者匿名函数&#xff0c;Java是从Java8开始支持的&#xff0c;这个概念并不是Java特有的&#xff0c;很多语言&#xff08;比如JS&#xff09;都有这个概念&#xff0c;它允许将一系列行为封装后作为参数传递&#xff0c;并可…

JOSEF约瑟 JY8-32B无辅源静态电压继电器整定范围15-130VAC过电压

JY-11电压继电器&#xff1b;JY-11A电压继电器&#xff1b; JY-11B电压继电器&#xff1b;JY-12电压继电器&#xff1b; JY-12A电压继电器&#xff1b;JY-12B电压继电器&#xff1b; JY-21电压继电器&#xff1b;JY-21A电压继电器&#xff1b; JY-21B电压继电器&#xff1b…

[MYSQL数据库]--表内操作(CURD)

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、表的 Cre…

「哈哥赠书活动 - 50期」-『AI赋能写作:AI大模型高效写作一本通』

⭐️ 赠书 - 《AI赋能写作&#xff1a;AI大模型高效写作一本通》 ⭐️ 内容简介 本书以ChatGPT为科技行业带来的颠覆性革新为起点&#xff0c;深入探讨了人工智能大模型如何为我们的创作提供强大支持。本书旨在帮助创作者更好地理解AI的价值&#xff0c;并充分利用其能力提升写…

ARM 汇编指令:(五)CMP指令

目录 1.CMP比较指令 2.指令条件码 cond 1.CMP比较指令 CMP指令是计算机指令集中的一种比较指令&#xff0c;用于比较两个操作数的大小关系或相等性&#xff0c;并根据比较结果设置或更新条件码寄存器&#xff08;或程序状态字&#xff09;的标志位。 指令格式&#xff1a;C…

Redis实现计数统计

介绍 计数器大量应用于互联网上大大小小的项目&#xff0c;你可以在很多场景都能找到计数器的应用范畴&#xff0c;单纯以技术派项目为例&#xff0c;也有相当多的地方会有计数相关的诉求&#xff0c;比如 文章带赞数 收藏数 评论数 用户粉丝数 ...... 技术派中有两种查询…

收藏贴!6个谈薪小技巧,助你拿到满意薪资

Salesforce的就业市场一直在迅猛发展&#xff0c;对Salesforce专业人士的需求持续不断&#xff0c;对优秀人才的需求更大。 本篇文章总结了6个谈薪小技巧&#xff0c;可以帮助SF从业者、求职者拿到满意的薪资。 01 了解市场价格 首先&#xff0c;需要了解当前就业市场的情况…

WPF监控平台(科技大屏)[一]

跟着B站的视频敲了一个略微复杂的WPF界面,链接如下.在这里我详细的写一份博客进行设计总结. 系统介绍和配置及主窗口设计_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wy421Y7QD?p1&vd_source4796b18a2e4c1ec8a310391a5644b6da 成果展示 实现过程 总体来说,我的…