用c++写一个解决01背包问题的代码
时间: 2023-06-06 21:05:41 浏览: 90
这是关于01背包问题的动态规划算法。采用C++语言完成的,代码间有注释.rar
好的,以下是使用 C 语言解决 01 背包问题的代码:
```c
#include<stdio.h>
#define max_n 1000 // 背包中物品的数量上限
#define max_w 1000 // 背包的最大承重量
int n, W, w[max_n + 5], v[max_n + 5]; // w 代表物品的重量,v 代表物品的价值
int dp[max_w + 5]; // dp[i] 表示背包承重为 i 时的最大价值
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
scanf("%d%d", &n, &W);
for (int i = 1; i <= n; i++) {
scanf("%d%d", &w[i], &v[i]);
}
for (int i = 1; i <= n; i++) {
for (int j = W; j >= w[i]; j--) { // 从大到小枚举,避免重复计算
dp[j] = max(dp[j], dp[j - w[i]] + v[i]); // 状态转移方程
}
}
printf("%d", dp[W]);
return 0;
}
```
以上是标准的 01 背包问题的 C 语言解决方案,其中 max_n 和 max_w 分别表示物品数量上限和背包最大承重量,n 和 W 分别表示实际物品数量和背包实际的承重量,w[i] 和 v[i] 分别表示第 i 个物品的重量和价值,dp[i] 表示背包承重为 i 时的最大价值。状态转移方程为 `dp[j] = max(dp[j], dp[j - w[i]] + v[i])`,意思是将前一个状态转移至当前状态,每次取最大值即可。
阅读全文