用c++帮我写一个01背包问题的动态规划算法
时间: 2023-06-01 17:07:30 浏览: 90
好的,以下是01背包问题的动态规划算法(使用C语言):
```c
#include <stdio.h>
#define N 100 // 背包的最大容量
#define M 1000 // 物品的最大数量
int weight[M]; // 物品的重量
int value[M]; // 物品的价值
int dp[N + 1]; // dp数组,dp[j]表示容量为j时的最大价值
int max(int a, int b) {
return a > b ? a : b;
}
int knapsack(int n, int w) {
for (int i = 1; i <= n; i++) {
for (int j = w; j >= weight[i]; j--) {
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
}
}
return dp[w];
}
int main() {
int n, w;
scanf("%d%d", &n, &w); // 输入物品的数量n和背包的容量w
for (int i = 1; i <= n; i++) {
scanf("%d%d", &weight[i], &value[i]); // 输入第i个物品的重量和价值
}
printf("%d\n", knapsack(n, w)); // 输出最大价值
return 0;
}
```
上述程序实现的是01背包问题的动态规划算法。输入的第一行包括两个整数n和w,表示物品的数量和背包的容量。接下来n行每行包括两个整数,表示物品的重量和价值。程序输出的是最大价值。
阅读全文