public class TravelOptimization {
public static void travelOptimization(int[] time, int[] score, int totalDays) {
int n = time.length;
int[][] dp = new int[n + 1][totalDays + 1];
String[] attractions = {"故宫", "颐和园", "长城", "天坛"};
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= totalDays; j++) {
if (j >= time[i - 1]) {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - time[i - 1]] + score[i - 1]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
int maxScore = dp[n][totalDays];
System.out.println("最大价值为:" + maxScore);
System.out.println("选择的景点有:");
int daysLeft = totalDays;
for (int i = n; i > 0 && maxScore > 0; i--) {
if (maxScore != dp[i - 1][daysLeft]) {
System.out.println(attractions[i - 1] + "(时间:" + time[i - 1] + "天,评分:" + score[i - 1] + ")");
maxScore -= score[i - 1];
daysLeft -= time[i - 1];
}
}
}
public static void main(String[] args) {
int[] time = {1, 2, 3, 1};
int[] score = {7, 8, 9, 6};
int totalDays = 4;
travelOptimization(time, score, totalDays);
}
}