编辑代码

function optimizeTravelDynamic(days, places) {
    const n = places.length;
    const dp = new Array(n + 1).fill(null).map(() => new Array(days + 1).fill(0));

    for (let i = 1; i <= n; i++) {
        for (let j = 1; j <= days; j++) {
            if (places[i - 1].time <= j) {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - places[i - 1].time] + places[i - 1].score);
            } else {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }

    let remainingDays = days;
    let selectedPlaces = [];

    for (let i = n; i > 0 && remainingDays > 0; i--) {
        if (dp[i][remainingDays] !== dp[i - 1][remainingDays]) {
            selectedPlaces.push(places[i - 1].name);
            remainingDays -= places[i - 1].time;
        }
    }

    return {
        selectedPlaces: selectedPlaces.reverse(),
        totalScore: dp[n][days]
    };
}

const days = 4;
const places = [
    { name: '故宫', time: 1, score: 7 },
    { name: '颐和园', time: 2, score: 8 },
    { name: '长城', time: 3, score: 9 },
    { name: '天坛', time: 1, score: 6 }
];

const result = optimizeTravelDynamic(days, places);
console.log("选择的景点:", result.selectedPlaces.join(', '));
console.log("总评分:", result.totalScore);