import java.util.ArrayList;
class Main {
public static ArrayList<String> optimizeTour(int daysAvailable, ArrayList<Attraction> attractions) {
int[][] dp = new int[attractions.size() + 1][daysAvailable + 1];
for (int i = 1; i <= attractions.size(); i++) {
for (int j = 1; j <= daysAvailable; j++) {
if (attractions.get(i - 1).time <= j) {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - attractions.get(i - 1).time] + attractions.get(i - 1).score);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
ArrayList<String> selectedAttractions = new ArrayList<>();
int i = attractions.size();
int j = daysAvailable;
while (i > 0 && j > 0) {
if (dp[i][j] != dp[i - 1][j]) {
selectedAttractions.add(attractions.get(i - 1).name);
j -= attractions.get(i - 1).time;
}
i--;
}
return selectedAttractions;
}
public static void main(String[] args) {
int daysAvailable = 3;
ArrayList<Attraction> attractions = new ArrayList<>();
attractions.add(new Attraction("故宫", 1, 7));
attractions.add(new Attraction("颐和园", 2, 8));
attractions.add(new Attraction("长城", 3, 9));
attractions.add(new Attraction("天坛", 1, 6));
ArrayList<String> selectedAttractions = optimizeTour(daysAvailable, attractions);
if (!selectedAttractions.isEmpty()) {
System.out.println("最优选择的景点是:" + String.join(", ", selectedAttractions));
} else {
System.out.println("没有足够时间游览任何景点。");
}
}
}
class Attraction {
public String name;
public int time;
public int score;
public Attraction(String name, int time, int score) {
this.name = name;
this.time = time;
this.score = score;
}
}