import java.util.List;
import java.util.ArrayList;
class Main {
public static List<ScenicSpot> selectScenicSpots(List<ScenicSpot> spots, int m) {
int n = spots.size();
int[][] dp = new int[n + 1][m + 1];
for (int i = 1; i <= n; i++) {
ScenicSpot spot = spots.get(i - 1);
for (int j = 1; j <= m; j++) {
if (j >= spot.getTime()) {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - spot.getTime()] + spot.getScore());
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
List<ScenicSpot> selectedSpots = new ArrayList<>();
int j = m;
for (int i = n; i > 0; i--) {
if (dp[i][j] != dp[i - 1][j]) {
selectedSpots.add(spots.get(i - 1));
j -= spots.get(i - 1).getTime();
}
}
return selectedSpots;
}
public static void main(String[] args) {
List<ScenicSpot> spots = new ArrayList<>();
spots.add(new ScenicSpot("故宫", 1, 7));
spots.add(new ScenicSpot("颐和园", 2, 8));
spots.add(new ScenicSpot("长城", 3, 9));
spots.add(new ScenicSpot("天坛", 1, 6));
int m = 4;
List<ScenicSpot> selectedSpots = selectScenicSpots(spots, m);
System.out.print("在4天内去");
for (ScenicSpot spot : selectedSpots) {
System.out.print(spot.getName()+"、");
}
System.out.print("能够获得的最大评分为:");
int max =0;
for (ScenicSpot spot : selectedSpots) {
max+=spot.getScore();
}
System.out.print(max);
}
}
class ScenicSpot {
private String name;
private int time;
private int score;
public ScenicSpot(String name, int time, int score) {
this.name = name;
this.time = time;
this.score = score;
}
public String getName() {
return name;
}
public int getTime() {
return time;
}
public int getScore() {
return score;
}
}