01背包
给定n种物品的价值和重量,求出当背包容量为m时,能够装下的最大价值
每种物品最多只能取一次
一维的写法
dp数组代表的是当前状态能够放下的最大价值
for(int i=0;i<n;i++) { for(int j=m;j>=w[i];j--) { dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } }
完全背包
给定n种物品的价值和重量,求出当背包容量为m时,能够装下的最大价值
每种物品可以取多次
一维的写法
for(int i=0;i<n;i++) { for(int j=w[i];j<=m;j++) { dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } }
01背包和完全背包的一维写法的区别在于for循环的第二层循环的遍历顺序
01背包:从m开始--
完全背包:从w[i]开始++
多重背包