完全背包

来源:互联网 发布:没u盘怎么装windows 编辑:程序博客网 时间:2024/06/05 09:49

接上一篇的的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]);}