定义dp数组,dp[i]表示到达以第i个地点结尾的最小花费

初始化dp数组的值为Integer.MAX_VALUE,表示地点不可达

dp[A]=0,初始化起点的花费为0

依次枚举以第i个地点结尾的最小花费,枚举第i个地点前面的地点并且距离小于等于L3并且地点可达的j地点

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int L1 = scanner.nextInt();
        int L2 = scanner.nextInt();
        int L3 = scanner.nextInt();
        int C1 = scanner.nextInt();
        int C2 = scanner.nextInt();
        int C3 = scanner.nextInt();
        int A = scanner.nextInt();
        int B = scanner.nextInt();
        int N = scanner.nextInt();
        int[] distance = new int[N + 1];
        for (int i = 2; i <= N; i++) {
            distance[i] = scanner.nextInt();
        }
        // dp[i] 表示以第i个站结尾的最小花费
        int[] dp = new int[N + 1];
        for (int i = 1; i <= N; i++) {
            dp[i] = Integer.MAX_VALUE;
        }
        dp[A] = 0;
        for (int i = A; i <= B; i++) {
            for (int j = A; j < i; j++) {
                if (distance[i] - distance[j] <= L3 && dp[j] != Integer.MAX_VALUE) {
                    int s = distance[i] - distance[j];
                    int price = s <= L1 ? C1 : (s <= L2 ? C2 : C3);
                    dp[i] = Math.min(dp[i], dp[j] + price);
                }
            }
        }
        System.out.println(dp[B]);
    }
}