接上一篇的的01背包
完全背包问题实在01背包的基础之上,每一个物品的数量可能不止1的情况
对原先的01背包的代码可以复用
void solve(){
for(int i=0;i<n;i++){
for(int j=0;i<=W;j++){
if(j<w[i]){
dp[i+1][j]=dp[i][j];
}else{
dp[i+1][j]=max(dp[i][j],dp[i+1][j-w[i]]+v[i]);
}
}
}
printf("%d\n",dp[n][W]);
}
用一维数组来实现
int dp[MAX_N+1];
void solve(){
for(int i=0;i<n;i++){
for(int j=w[i];j<=W;j++){
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
printf("%d\n",pd[W]);
}