用c写一个程序:又到了忙碌的时候,旅行者的任务多的数不过来,但是旅行者已经把他们分成了两类:简单任务和困难任务,简单任务不需要准备时间,可以直接完成,困难任务需要有一天的准备时间,也就是说,如果旅行者今天选择了困难任务,那么昨天旅行者就不可以去完成任务,每一个任务的奖励是已知的,旅行者想在固定的时间内获取最大的奖励
时间: 2023-02-12 09:58:46 浏览: 58
C语言程序如下:
```c
#include<stdio.h>
#include<stdlib.h>
#define DAYS 30 // 旅行时间为30天
// 简单任务和困难任务的奖励
int simple_tasks[DAYS] = {...};
int hard_tasks[DAYS] = {...};
// 定义二维数组来存储每一天完成任务的最大奖励
int dp[DAYS][2];
int main() {
for (int i = 0; i < DAYS; i++) {
if (i == 0) {
dp[i][0] = simple_tasks[i];
dp[i][1] = hard_tasks[i];
} else {
dp[i][0] = max(dp[i-1][0], dp[i-1][1]) + simple_tasks[i];
dp[i][1] = max(dp[i-1][0], dp[i-2][1]) + hard_tasks[i];
}
}
// 求最后两天的最大奖励
int max_reward = max(dp[DAYS-1][0], dp[DAYS-1][1]);
max_reward = max(max_reward, dp[DAYS-2][1]);
printf("最大奖励为: %d", max_reward);
return 0;
}
```
上面的程序使用动态规划的思想来解决问题。首先定义了一个二维数组 dp[DAYS][2] 来存储每一天完成任务的最大奖励。其中 dp[i][0] 表示第 i 天完成简单任务的最大奖励,dp[i][1] 表示第 i 天完成困难任务的最大奖励。
在程序的 for 循环中,每一天的最大奖励都是根据昨天或者前天的最大奖励来计算的。如果当天选择完成简单任务,那么最大奖励就是昨天完成简单任务或困难任务的最大奖励加上