01背包问题动态规划c++代码
时间: 2023-09-25 10:16:38 浏览: 105
以下是 01背包问题 的动态规划的 C 代码实现:
```c
#include <stdio.h>
#define N 1000
#define W 10000
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int n, m;
int w[N], v[N];
int dp[N][W];
// 输入物品数量和背包容量
scanf("%d%d", &n, &m);
// 输入每个物品的重量和价值
for (int i = 1; i <= n; i++) {
scanf("%d%d", &w[i], &v[i]);
}
// 初始化
for (int i = 0; i <= m; i++) {
dp[0][i] = 0;
}
// 动态规划
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j < w[i]) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
}
}
}
// 输出结果
printf("%d\n", dp[n][m]);
return 0;
}
```
其中,`n` 表示物品数量,`m` 表示背包容量,`w[i]` 表示第 `i` 个物品的重量,`v[i]` 表示第 `i` 个物品的价值,`dp[i][j]` 表示在前 `i` 个物品中选择,且背包容量为 `j` 时的最大价值。
阅读全文