2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))

这篇具有很好参考价值的文章主要介绍了2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 E、蜗牛(时间限制: 1.0s 内存限制: 512.0MB)
【问题描述】
这天,一只蜗牛来到了二维坐标系的原点。 在 x 轴上长有 n 根竹竿。它们平行于 y 轴,底部纵坐标为 0 ,横坐标分别 为 x 1 , x 2 , ..., x n 。竹竿的高度均为无限高,宽度可忽略。蜗牛想要从原点走到第 n 个竹竿的底部也就是坐标 ( x n , 0) 。它只能在 x 轴上或者竹竿上爬行,在 x 轴
上爬行速度为 1 单位每秒;由于受到引力影响,蜗牛在竹竿上向上和向下爬行 的速度分别为 0 . 7 单位每秒和 1 . 3 单位每秒。 为了快速到达目的地,它施展了魔法,在第 i 和 i + 1 根竹竿之间建立了传 送门(0 < i < n ),如果蜗牛位于第 i 根竹竿的高度为 a i 的位置 ( x i , a i ) ,就可以 瞬间到达第 i + 1 根竹竿的高度为 b i +1 的位置 ( x i +1 , b i +1 ), 请计算蜗牛最少需要多少秒才能到达目的地。
【输入格式】
输入共 1 + n 行,第一行为一个正整数 n ;
第二行为 n 个正整数 x 1 , x 2 , . . . , x n ;
后面 n − 1 行,每行两个正整数 a i , b i +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⁵ ,a i , b i ≤ 10⁴ ,x i ≤ 10⁹ 。

非官方题解。

2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))

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

链接由csdn用户 我为小范  提供。

解题思路:

对于 100 % 的数据,保证 n ≤ 10⁵ ,a i , b i ≤ 10⁴ ,x i ≤ 10⁹ 。

可知 时间复杂度最大为O(n logn);

依据题意,很明显可使用时间复杂度为O(n)的动态规划求解此题。

用door[i]表示第i根竹竿上传送门的高度,pos[i]表示第i根竹竿距离原点的距离。height[i-1]表示从第i-1个传送门传送到第i根竹竿后蜗牛所在的高度;用doorMin[i]表示从原点到达第i根竹竿传送门的最短时间,用footMin[i]表示从原点到达第i根竹竿底部的最短时间。

        Scanner scanner = new Scanner(System.in);
        int n=scanner.nextInt();
        int[] pos=new int[n];//pos[i]表示第i根竹竿距离原点的距离

        int[] door =new int[n];//door[i]表示第i根竹竿上传送门的高度

        int[] height=new int[n];//height[i]表示从第i个传送门传送到第i+1根竹竿后蜗牛所在的高度

        double[] footMin=new double[n];//footMin[i]表示从原点到达第i根竹竿底部的最短时间

        double[] doorMin=new double[n];//doorMin[i]表示从原点到达第i根竹竿传送门的最短时间

        for (int i=0;i<n;i++)
        {
            pos[i]=scanner.nextInt();
        }
        for (int i=0;i<n-1;i++){
            door[i]=scanner.nextInt();
            height[i]=scanner.nextInt();
        }

蜗牛要到达第i根竹竿(传送门或底部),必然要经过第i-1根竹竿。

可知第一根竹竿可以初始化为:

footMin[0]=pos[0]*1.0;
doorMin[0]=pos[0]+door[0]*1.0/0.7;

这里先讨论第i根竹竿的传送门距离原点的最小时间doorMin[i]的情况。

从第i-1根竹竿到第i根竹竿的传送门有两种情况:

                1.花费doorMin[i-1]的时间到达第i-1根竹竿的传送门,然后到达第i根竹竿的height[i-1]高度,向上或向下爬行(door[i]-height[i-1])/0.7秒或(height[i-1]-door[i])/1.3秒的时间,这里以height[i-1]<=door[i],向上爬行为例,到达传送门。

2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))

                2.花费doorMin[i-1]的时间,到达第i-1根竹竿的底部,直接爬行,经过pos[i]-pos[i-1]秒的时间到达 foot[i]=的底部,再向上爬行(door[i]/0.7)秒的时间到达传送门。

2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))

        

得出doorMin[i]的动态转移方程:

        以door[i]>height[i-1]为例:

        footDistance=pos[i]-pos[i-1];

        doorMin[i]=Min(doorMin[i-1]+(door[i]-height[i-1])/0.7,  footMin[i-1]+footDistance+door[i]/0.7);

然后讨论footMin[i]的情况:

同理,从第i-1根竹竿到第i根竹竿的底部有两种情况:

                1.花费doorMin[i-1]的时间,到达第i-1根竹竿的传送门,然后到达第i根竹竿的height[i-1]高度,向下爬行(height[i-1])/1.3秒的时间,到达第i根竹竿的底部。

2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))

                2.花费footMin[i-1]的时间,到达第i-1根竹竿的底部,直接爬行,经过pos[i]-pos[i-1]秒的时间到达 第i根竹竿的底部。

                 2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))

得出footMin[i]的动态转移方程:

        footMin[i]=Min(doorMin[i-1]+height[i-1]/1.3,  footMin[i-1]+footDistance);

经历一次循环后,footMin[n-1]就是蜗牛从原点到达第n根竹竿的最短时间。

代码:

//这里从1开始,因为i=0是初始化条件。
//以n-1为终点,因为n-1的下标代表第n个竹竿
    for (int i=1;i<n;i++){
        int footDistance=pos[i]-pos[i-1];
            //求doorMin[i]
        if (height[i-1]>=door[i]){//传送过来后的高度比门高
            doorMin[i]=Math.min(doorMin[i-1]+(height[i-1]-door[i])*1.0/1.3,
                                          footMin[i-1]+footDistance+door[i]*1.0/0.7);
        }else{    //传送过来后的高度比门低
            doorMin[i]=Math.min(doorMin[i-1]+(door[i]-height[i-1])*1.0/0.7,
                                          footMin[i-1]+footDistance+door[i]*1.0/0.7);
        }
            
        //求footMin[i]
            
        footMin[i]=Math.min(doorMin[i-1]+height[i-1]*1.0/1.3,
                                          footMin[i-1]+footDistance*1.0);
    }
    System.out.println(String.format("%.2f",footMin[n-1]));

优化:

对于时间复杂度来说O(n)已经无法优化,

对于空间复杂度O(n)也无法优化:

但是可以减小两个数组空间的开销。

              用preFoot来代替minFoot[i-1], nowFoot来替代minFoot[i];

              用preDoor来代替minDoor[i-1], nowDoor来替代minDoor[i];

因为我们并不关心i-1之前的数据,可直接用迭代法代替。

创作不易,点赞收藏加关注!!!文章来源地址https://www.toymoban.com/news/detail-426958.html

到了这里,关于2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023年第十四届蓝桥杯JAVA B组题目

    第二次参加蓝桥杯,手机再次没电导致只写了两个半小时就交了(不能重复交哎),这次带了充电宝,结果充电宝充电线中途松了,不得不说腾讯会议的耗电量真大。本博客就是刚提交后写的,可以看看时间hhh。 就做了前五道题,不过前五道题就搜索、枚举、进制就能做和一

    2023年04月09日
    浏览(39)
  • 蓝桥杯2023年第十四届省赛真题-平方差--题解

    时间限制: 3s 内存限制: 320MB 提交: 2379 解决: 469 给定 L, R,问 L ≤ x ≤ R 中有多少个数 x 满足存在整数 y,z 使得 x = y2 − z2。 输入一行包含两个整数 L, R,用一个空格分隔。 输出一行包含一个整数满足题目给定条件的 x 的数量。 复制 复制 1 = 1^2 − 0^2 ; 3 = 2^2 − 1^2 ; 4 =

    2024年02月07日
    浏览(50)
  • 蓝桥杯2023年第十四届省赛真题-买瓜--C语言题解

    目录 蓝桥杯2023年第十四届省赛真题-买瓜 题目描述 输入格式 输出格式 样例输入 样例输出 提示 【思路解析】 【代码实现】 时间限制: 3s 内存限制: 320MB 提交: 796 解决: 69 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。 小蓝刀功了得,他可以把任何瓜

    2024年02月07日
    浏览(49)
  • 2023年第十四届蓝桥杯省赛Java C组题解

    只做出来(ACDFGH),挑几个出来,答案不一定正确,但自己测试通过了 求1~20230408的和 这里就直接套等差数列的求和公式,答案:204634714038436   【问题描述】         有一个长度为n的数组(n是10的倍数),每个数 Ai 都是区间[0,9]中的整数,小明发现数组里每种数出现的次数不太

    2023年04月26日
    浏览(38)
  • 2023年第十四届蓝桥杯Java_大学B组真题

    【考生须知】 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试 题。 考试时间为 4 小时。考试期间选手可浏览自己已经提交的答案,被浏览的答案允许拷贝。时间截止后,将无法继续提交或浏览答案。 对同一题目,选手可多次提交答案,以最后一次提

    2023年04月11日
    浏览(42)
  • 题目 3158: 蓝桥杯2023年第十四届省赛真题-三国游戏(贪心)

    小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i 个事件发生时会分别让 X, Y, Z 增加Ai , Bi ,Ci 。 当游戏结束时 (所有事件的发生与否已经确

    2024年02月01日
    浏览(53)
  • 2023年第十四届蓝桥杯大赛python组省赛真题(已更新完)

    本篇更新蓝桥杯省赛真题的后5道。 6.试题 F: 公因数匹配 时间限制: 10.0s 内存限制: 512.0MB 本题总分:15 分 【问题描述】 给定 n 个正整数 Ai,请找出两个数 i, j 使得 i j 且 Ai 和 Aj 存在大于 1 的 公因数。 如果存在多组 i, j,请输出 i 最小的那组。如果仍然存在多组 i, j,请输出

    2024年02月06日
    浏览(61)
  • 2023年第四届MathorCup高校数学建模挑战赛——大数据竞赛B题解题思路

    比赛时长为期7天的妈杯大数据挑战赛如期开赛,为了帮助对B题有更深的理解,这里为大家带来B题的初步解题思路。 赛道B:电商零售商家需求预测及库存优化问题 由于妈杯竞赛分为初赛复赛,因此,对于B题大家仅仅看到了预测相关的问题,没有优化相关的问题。包括题干中

    2024年02月06日
    浏览(45)
  • 2023年第十四届蓝桥杯Web应用开发(职业院校组)省赛真题

    前言: 因博主申请的线上考试所以留下了真题,本篇文章只有题目没有答案( 真题源码资源在最后 ),因博主技术有限(请理解一下),博主只拿了省二 目录 1. 电影院排座位 2. 图⽚⽔印⽣成: 3.  收集帛书碎⽚ 4. ⾃适应⻚⾯ 5.  外卖给好评 6. 视频弹幕  7. ISBN 转换与⽣成

    2024年02月05日
    浏览(46)
  • 第十四届蓝桥杯大赛软件赛省赛-试题 B---01 串的熵 解题思路+完整代码

    欢迎访问个人网站来查看此文章:http://www.ghost-him.com/posts/db23c395/ 对于一个长度为 n 的 01 串 S = x 1 x 2 x 3 . . . x n S = x_{1} x_{2} x_{3} ... x_{n} S = x 1 ​ x 2 ​ x 3 ​ ... x n ​ ,香农信息熵的定义为 H ( S ) = − ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) H(S ) = − {textstyle sum_{1}^{n}} p(x_{i})log_{2} (p

    2023年04月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包