完全背包问题:
当前有N种物品,第i种物品的体积是Ci,价值是Wi
每种物品的数量都是无限的,可以任意选择若干件,称之为完全背包问题
现在有容量为V的背包,放入若干物品,使总体积不超过V,并且总价值尽可能大。
for(int i=1;i<=n;i++){
for(int j=c[i];j<=v;j++){
dp[j]=max(dp[j-c[i]]+w[i],dp[j]);
}
}
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e4+50;
int dp[maxn];
int vol[maxn],p[maxn];
int main()
{
int n,v;
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++){
scanf("%d%d",&vol[i],&p[i]);
}
for(int i=1;i<=n;i++){
for(int j=vol[i];j<=v;j++){
dp[j]=max(dp[j-vol[i]]+p[i],dp[j]);
}
}
printf("%d\n",dp[v]);
return 0;
}