将下列代码转为c语言 #include <iostream> #include <cstring> using namespace std; int main() { int T = 0; // 规定时间 int M = 0; // 草药数目 cin >> T >> M; // 用i表示第i个草药,便于理解 int time[M + 1] = { 0 }; // 第i个草药的采集时间 int value[M + 1] = { 0 }; // 第i个草药的价值 for (int i = 1; i < M + 1; i++) { cin >> time[i] >> value[i]; } int res[T + 1][M + 1]; // 最优解,表示在时间T内考虑前M个物品时的最大价值 memset(res, 0, sizeof(res)); // 数组归零的写法要用memset(),用res[][] = { 0 }好像不行 for (int i = 1; i < T + 1; i++) { for (int j = 1; j < M + 1; j++) { if (i < time[j]) { res[i][j] = res[i][j - 1]; // 第i个草药没法采 } else { // 第i个草药可以采,比较采和不采的价值,注意前者的计算公式 res[i][j] = max(res[i][j - 1], res[i - time[j]][j - 1] + value[j]); } } } cout << res[T][M] << endl; // 输出在T时间内考虑M个草药的最优解 return 0; }
时间: 2024-01-25 20:03:01 浏览: 117
以下是将题目 1100: 采药 的代码转换为 C 语言的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
int T = 0; // 规定时间
int M = 0; // 草药数目
scanf("%d %d", &T, &M);
// 用i表示第i个草药,便于理解
int time[M + 1]; // 第i个草药的采集时间
int value[M + 1]; // 第i个草药的价值
for (int i = 1; i < M + 1; i++) {
scanf("%d %d", &time[i], &value[i]);
}
int res[T + 1][M + 1]; // 最优解,表示在时间T内考虑前M个物品时的最大价值
memset(res, 0, sizeof(res)); // 数组清零
for (int i = 1; i < T + 1; i++) {
for (int j = 1; j < M + 1; j++) {
if (i < time[j]) {
res[i][j] = res[i][j - 1]; // 第i个草药没法采
} else {
// 第i个草药可以采,比较采和不采的价值,注意前者的计算公式
res[i][j] = (res[i][j - 1] > res[i - time[j]][j - 1] + value[j]) ? res[i][j - 1] : res[i - time[j]][j - 1] + value[j];
}
}
}
printf("%d\n", res[T][M]); // 输出在T时间内考虑M个草药的最优解
return 0;
}
```
阅读全文