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


    }
}
相关推荐
筏.k8 分钟前
动态规划之 “完全背包“ ------P8646 [蓝桥杯 2017 省 AB] 包子凑数
算法·蓝桥杯·动态规划
promising-w41 分钟前
【蓝桥杯单片机】第十二届省赛
单片机·嵌入式硬件·蓝桥杯
_GR6 小时前
2016年蓝桥杯第七届C&C++大学B组真题及代码
c语言·数据结构·c++·算法·蓝桥杯
screamn6 小时前
蓝桥杯 - 每日打卡(类斐波那契循环数)
java·职场和发展·蓝桥杯
我不是彭于晏丶6 小时前
蓝桥杯 过年【算法赛】
算法·职场和发展·蓝桥杯
BingLin-Liu16 小时前
蓝桥杯备考:DFS之选数问题
职场和发展·蓝桥杯·深度优先
wuqingshun31415918 小时前
蓝桥杯 团建
c语言·数据结构·c++·算法·蓝桥杯·深度优先
会编程的果子君18 小时前
蓝桥杯好题推荐--高精度加法
职场和发展·蓝桥杯
双人徐木子李21 小时前
蓝桥杯B15-4,R格式
算法·蓝桥杯·r语言