补题蓝桥杯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]);


    }
}
相关推荐
aqiu1111114 天前
蓝桥杯省一学习计划:每天 2 小时,12 周高效备赛
学习·职场和发展·蓝桥杯
智者知已应修善业9 天前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
Dream it possible!11 天前
蓝桥杯_翻转_C++
c++·算法·蓝桥杯
鑫 源16 天前
VS2019 for mac里用c#开发Mac OS应用 避坑 和 源码
职场和发展·蓝桥杯
aqiu11111117 天前
【蓝桥杯】0仙境诅咒 — BFS/DFS 图论连通性问题(C++ 题解)
蓝桥杯·深度优先·宽度优先
捷瑞电子工坊1 个月前
嵌入式蓝桥杯从零点亮第一个LED
stm32·蓝桥杯·cubemx·嵌入式·led·ll·锁存
aqiu1111111 个月前
【数位 DP / 记忆化搜索】蓝桥云课 - 光轨区的 AI 数 题解
c++·算法·蓝桥杯·数位dp
aqiu1111111 个月前
【并查集 / 图论】蓝桥云课 - 魔法大陆的城市群(求无向图连通块数量)题解
蓝桥杯·图论
aqiu1111111 个月前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
Chester_19991 个月前
CSP202312C.树上搜索
开发语言·数据结构·c++·蓝桥杯·stl