#include <stdio.h>
#include <string.h>
struct Funtion {
char name[20];
int daytimes;
int rating;
};
void optimizeTravelPlan(struct Funtion funtions[], int n, int days) {
int dp[days + 1];
memset(dp, 0, sizeof(dp));
for (int i = 0; i < n; i++) {
if (funtions[i].daytimes > days)
continue;
for (int j = days; j >= funtions[i].daytimes; j--) {
dp[j] = dp[j] > dp[j - funtions[i].daytimes] + funtions[i].rating ? dp[j] :
dp[j - funtions[i].daytimes] + funtions[i].rating;
}
}
printf("最大价值: %d\n", dp[days]);
printf("旅行路线:\n");
int remainDays = days;
for (int i = n - 1; i >= 0; i--) {
if (remainDays >= funtions[i].daytimes && dp[remainDays] ==
dp[remainDays - funtions[i].daytimes] + funtions[i].rating)
{
printf("%s\n", funtions[i].name);
remainDays -= funtions[i].daytimes;
}
}
}
int main() {
struct Funtion funtions[] = {
{"故宫", 1, 7},
{"颐和园", 2, 8},
{"长城", 3, 9},
{"天坛", 1, 6}
};
int n = sizeof(funtions) / sizeof(funtions[0]);
int days = 4;
optimizeTravelPlan(funtions, n, days);
return 0;
}