class Main {
public static void travelOptimization(String[] places, int[] time, int[] scores, int days) {
int[][] dp = new int[places.length][days + 1];
for (int i = 0; i < places.length; i++) {
for (int j = 1; j <= days; j++) {
int notGo = i > 0 ? dp[i - 1][j] : 0;
int go = 0;
if (j >= time[i]) {
go = i > 0 ? dp[i - 1][j - time[i]] + scores[i] : scores[i];
}
dp[i][j] = Math.max(notGo, go);
}
}
int i = places.length - 1;
int j = days;
while (i >= 0 && j > 0) {
if (i > 0 && dp[i][j] != dp[i - 1][j]) {
System.out.println(places[i] + ",时间:" + time[i] + "天,评分:" + scores[i]);
j -= time[i];
} else if (i == 0 && dp[i][j] > 0) {
System.out.println(places[i] + ",时间:" + time[i] + "天,评分:" + scores[i]);
j -= time[i];
}
i--;
}
}
public static void main(String[] args) {
String[] places = {"故宫", "颐和园", "长城", "天坛"};
int[] time = {1, 2, 3, 1};
int[] scores = {7, 8, 9, 6};
int days = 4;
travelOptimization(places, time, scores, days);
}
}