#include <stdio.h>
typedef struct {
char name[10];
int time;
int score;
} Scenery;
void DynamicProgramming(int times, Scenery scenery[], int num) {
int arr[num + 1][times + 1];
for (int i = 0; i <= num; i++) {
for (int j = 0; j <= times; j++) {
if (i == 0 || j == 0) {
arr[i][j] = 0;
} else if (scenery[i - 1].time <= j) {
arr[i][j] = (arr[i - 1][j] > (arr[i - 1][j - scenery[i - 1].time] + scenery[i - 1].score))
? arr[i - 1][j] : arr[i - 1][j - scenery[i - 1].time] + scenery[i - 1].score;
} else {
arr[i][j] = arr[i - 1][j];
}
}
}
printf("最大评分值为:%d\n", arr[num][times]);
printf("选择的景点有:");
int i = num, j = times;
while (i > 0 && j > 0) {
if (arr[i][j] != arr[i - 1][j]) {
printf("%s ", scenery[i - 1].name);
j -= scenery[i - 1].time;
}
i--;
}
}
int main() {
Scenery scenery[] = {
{"故宫", 1, 7},
{"颐和园", 2, 8},
{"长城", 3, 9},
{"天坛", 1, 6}
};
int times = 4;
int num = sizeof(scenery) / sizeof(scenery[0]);
DynamicProgramming(times, scenery, num);
}