经典算法题01背包用C++写
时间: 2023-11-03 14:25:52 浏览: 60
很高兴为您解答关于经典算法题01背包用C写的问题!关于C语言实现01背包,可以参考以下代码:
#include <stdio.h>
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int N, W;
scanf("%d%d", &N, &W);
int w[N], v[N], dp[W + 1];
for(int i = 0; i < N; i++) {
scanf("%d%d", &w[i], &v[i]);
}
for(int i = 0; i <= W; i++) {
dp[i] = 0;
}
for(int i = 0; i < N; i++) {
for(int j = W; j >= w[i]; j--) {
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
printf("%d\n", dp[W]);
return 0;
}
以上代码使用动态规划的思想,利用一维数组 dp 来存储每一个重量下最大的价值。其中 max 函数用来求最大值。具体实现方式是,先将 dp 数组全部初始化为 0,表示只有重量为 0 时可以放入 0 件物品,然后从第一件物品开始,倒序循环每一个重量,如果当前重量能够放入该物品,则判断是否可以将该物品加入,更新 dp 数组中对应的最大价值,最后输出 dp[W] 即可得到最多能够放入的物品价值。
希望我的回答能够解决您的问题,有任何疑问欢迎随时问我!
阅读全文