补题蓝桥杯14届JavaB组第4题

算法:动态规划

需要两个一维数组来进行dp

一个用来记录到当前位置的最短时间,另一个用来记录到达当前位置传送门的最短时间

到达传送门的时间需要进行判断,如果上一次传送到达传送门,需要判断上一次传送到这的位置在当前传送门的上方,还是下方

java 复制代码
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];
        int[] a = new int[n + 1];
        int[] b = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            x[i] = sc.nextInt();
        }
        for (int i = 1; i <= n - 1; i++) {
            a[i] = sc.nextInt();
            b[i + 1] = sc.nextInt();
        }

        double[][] dp = new double[n + 1][2];
        dp[1][0] = x[1];//到这个节点的时间
        dp[1][1] = x[1] + a[1] / 0.7;//到这个节点传送门的最短时间
        for (int i = 2; i <= n; i++) {

            if (a[i] <= b[i]) {
                dp[i][1] = Math.min(dp[i - 1][0] + x[i] - x[i - 1] + a[i] / 0.7, dp[i - 1][1] + (b[i ] - a[i]) / 1.3);

            } else {
                dp[i][1] = Math.min(dp[i - 1][0] + x[i] - x[i - 1] + a[i] / 0.7, dp[i - 1][1] + (a[i] - b[i]) / 0.7);
            }
            dp[i][0] = Math.min(dp[i - 1][1] + b[i] / 1.3, dp[i - 1][0] + x[i] - x[i - 1]);

        }
        System.out.printf("%.2f",dp[n][0]);


    }
}
相关推荐
xnglan5 天前
蓝桥杯手算题和杂题简易做法
数据结构·数据库·c++·python·算法·职场和发展·蓝桥杯
Warren985 天前
MySQL,Redis重点面试题
java·数据库·spring boot·redis·mysql·spring·蓝桥杯
喜喜安6 天前
蓝桥杯备赛 按键、LCD、定时器
职场和发展·蓝桥杯
echo_pen7 天前
蓝桥杯---第六届省赛单片机组真题
单片机·蓝桥杯
qiuyunoqy10 天前
蓝桥杯算法之搜索章 - 3
c++·算法·蓝桥杯·深度优先·dfs·剪枝
snowfoootball11 天前
2025 蓝桥杯C/C++国B 部分题解
c语言·c++·笔记·学习·贪心算法·蓝桥杯
爱吃生蚝的于勒13 天前
一文学会c++继承 组合
java·c语言·开发语言·数据结构·c++·算法·蓝桥杯
echo_pen13 天前
蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
单片机·蓝桥杯
qiuyunoqy14 天前
蓝桥杯算法之搜索章 - 2
算法·蓝桥杯·深度优先
No0d1es15 天前
第15届蓝桥杯Scratch图形化国赛初/中级组2024年9月7日真题
青少年编程·蓝桥杯·scratch·国赛·图形化