编辑代码

#include <stdio.h>

// 定义景点结构体
typedef struct {
char name[10];
int time;
int score;
} Scenery;

// 动态规划法函数处理 
void DynamicProgramming(int times, Scenery scenery[], int num) {
//创建景点数+1为行,天数+1为列的二维数组,用于存储结果 
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);

}