定义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]);
}
}

京公网安备 11010502036488号