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