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


    }
}
相关推荐
wuqingshun3141597 小时前
蓝桥杯 19. 植树
c++·算法·蓝桥杯·深度优先·动态规划
梁下轻语的秋缘10 小时前
每日c/c++题 备战蓝桥杯(P1886 滑动窗口 /【模板】单调队列)
c语言·c++·蓝桥杯
wuqingshun31415919 小时前
蓝桥杯 17. 通电
c++·算法·职场和发展·蓝桥杯·深度优先·动态规划
jia_jia_LL1 天前
备战蓝桥杯国赛第一天-atcoder-beginner-contest404
c++·算法·蓝桥杯·图论
Best_Me071 天前
FiLo++的框架图介绍
人工智能·算法·机器学习·职场和发展·蓝桥杯
YuforiaCode1 天前
第十六届蓝桥杯 2025 C/C++组 密密摆放
c语言·c++·蓝桥杯
桦02 天前
[蓝桥杯真题题目及解析]2025年C++b组
c++·职场和发展·蓝桥杯
让我们一起加油好吗3 天前
【第十六届蓝桥杯省赛】比赛心得与经验分享(PythonA 组)
经验分享·python·算法·蓝桥杯
wuqingshun3141593 天前
蓝桥杯 10. 凯撒加密
c++·算法·职场和发展·蓝桥杯·深度优先
YuforiaCode4 天前
第十一届蓝桥杯 2020 C/C++组 既约分数
c语言·c++·蓝桥杯