AcWing 3. 完全背包问题(C语言解)
原题链接
简单
作者:
会发光发亮的阿豪
,
2020-07-22 21:56:03
,
所有人可见
,
阅读 1028
C语言代码
#include <stdio.h>
#include <string.h>
/*
完全背包问题
有 N件物品和一个容量是 V的背包。每件物品都可以无限使用。
第 i件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。
输入格式
第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i件物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
*/
int main() {
int N, V;
scanf("%d%d", &N, &V);
int v[N + 1], w[N + 1];
int dp[V + 1];
for (int i = 1; i <= N; ++i) {
scanf("%d%d", &v[i], &w[i]);
}
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= N; i++) {
for (int j = v[i]; j <= V; j++) {
dp[j] = dp[j] > (dp[j - v[i]] + w[i]) ? dp[j] : dp[j - v[i]] + w[i];
}
for (int j = 0; j <= V; j++) { //打印详细步骤
printf("%d", dp[j]);
printf(" ");
}
printf("\n");
}
printf("%d", dp[V]);
}