编辑代码

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;
    }
}