#include <stdio.h>
struct Site {
char name[20];
int time;
int score;
};
void maximizeValue(struct Site sites[], int n, int maxTime) {
int dp[n+1][maxTime+1];
for (int i = 0; i <= n; i++)
dp[i][0] = 0;
for (int j = 0; j <= maxTime; j++)
dp[0][j] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= maxTime; j++) {
if (sites[i-1].time > j)
dp[i][j] = dp[i-1][j];
else
dp[i][j] = (dp[i-1][j] > (dp[i-1][j-sites[i-1].time] + sites[i-1].score)) ?
dp[i-1][j] : (dp[i-1][j-sites[i-1].time] + sites[i-1].score);
}
}
int i = n, j = maxTime;
while (i > 0 && j > 0) {
if (dp[i][j] != dp[i-1][j]) {
printf("选择景点:%s, 时间:%d天, 评分:%d\n", sites[i-1].name, sites[i-1].time, sites[i-1].score);
j -= sites[i-1].time;
}
i--;
}
}
int main() {
int n = 4;
int maxTime = 4;
struct Site sites[] = {
{"故宫", 1, 7},
{"颐和园", 2, 8},
{"长城", 3, 9},
{"天坛", 1, 6}
};
printf("选择的景点列表:\n");
maximizeValue(sites, n, maxTime);
return 0;
}