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