题目
分析
完全背包与01背包的区别在于,每种物品是否可以无限个。意思就是完全背包可以重复取同一间物品。代码上与01背包的不同点在于,在遍历背包容量时要正序遍历,因为倒叙遍历对应只使用取一次物品的情况。
代码
#include<iostream> #include<algorithm> using namespace std; int main(){ int n,v; cin>>n>>v; vector<int>dp(v+1,0); //dp数组表示最大价值 vector<int>weight(n); //物品的体积 vector<int>value(n); // 物品的价值 for(int i = 0;i < n;i++){ cin>>weight[i]>>value[i]; } //先遍历背包,再遍历容量,容量正序遍历 for(int i = 0;i < n;i++){ for(int j = weight[i];j <= v;j++){ dp[j] = max(dp[j],dp[j-weight[i]] + value[i]); } } cout<<dp[v]; return 0; }