例题
有 N 种物品和一个容量为 V 的背包,每种物品都有无限件可用。放入第 i 种物品的费用是 C[i] ,价值是 W[i] 。求解:将哪些物品装入背包,可使这些物品的耗费的费用总和不超过背包容量,且价值总和最大。
思路
按照 01 背包相同的思路,
代码
using namespace std;
int W, V;
int
有 N 种物品和一个容量为 V 的背包,每种物品都有无限件可用。放入第 i 种物品的费用是 C[i] ,价值是 W[i] 。求解:将哪些物品装入背包,可使这些物品的耗费的费用总和不超过背包容量,且价值总和最大。
按照 01 背包相同的思路,
#include<cstdio>
#include<iostream>
#define maxn 1000
using namespace std;
int W[maxn], V[maxn];
int main() {
int m, n;
int dp[maxn];
dp[0] = 0;
cin >> m;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> W[i];
cin >> V[i];
}
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
if (i >= W[j]) {
int choose = dp[i - W[j]] + V[j];
if (choose > dp[i]) { dp[i] = choose; }
}
cout << dp[m];
return 0;
}
博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议本文永久链接是:https://shushuwoa.com/2021/02/11/%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85/