高速公路休息站充电规划

 小明购买了一辆续航里程数达 1000 公里的某自动驾驶新能源车。某一天车辆充满电后,需从甲城出发前往距离 D 公里远的乙城,全程走高速。车载导航提示沿途有 N 个休息站均可提供充电服务,各休息站均可实时提供当前充电排队时间,单位为小时。
 请协助规划时间最优的休息站充电方案,返回最短的旅行用时。
 为方便计算,高速上的行驶速度固定为 100 公里/小时。规划时可不必考虑保留安全续航里程数,汽车可以将电完全用光,1000 公里续航的汽车按 100 公里/小时,可以开 10 个小时。每次充电时间固定为 1 小时,完成后电量充满。各站点充电排队时间不会变化,充电排队过程不耗电
 输入描述:
  第一行表示甲乙两城的距离 D,单位为公里。
  第二行表示沿途的休息站数量 N。
  第三行起,每行 2 个数据,分别表示休息站离起点甲城的距离,以及充电排队所需时间,单位为小时。各休息站按离从近到远排序。 0 < = D < = 1000000 ,D 是 100 的整数倍 0 < = N < = 10000
 输出描述:一个数字,表示花费最少的总时间

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int d = sc.nextInt();
        int n = sc.nextInt();
        int[][] row = new int[n + 2][2];
        row[0][0] = 0;
        row[0][1] = 0;
        for(int i = 1;i < n + 1;i++){
            row[i][0] = sc.nextInt();
            //先加,防止代码重复计算
            row[i][1] = sc.nextInt() + 1;
        }
        row[n+1][0] = d;
        row[n+1][1] = 0;
        
        int[] dp = new int[n+2];
        Arrays.fill(dp,Integer.MAX_VALUE);
        dp[0] = 0;
        for(int i = 0;i <= n+1;i++){
            for(int j = i - 1;j >= 0;j--){
                if(row[i][0] - row[j][0] > 1000){
                    break;
                }
                //i是1就计算0 + 等待的时间,最后找最少的等待时间,从0开始就计算最开始第一次停下来的情况
                dp[i] = Math.min(dp[j] + row[i][1],dp[i]);
            }
        }
        System.out.print(dp[n + 1] + d / 100);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容