文字上的理解:
**01背包:**物品只能取一次。
**完全背包:**物品不限次。
代码上:
设:
n个物品,每个占t[i]空间,p[i]个价值,共有m容量。
01背包核心代码:
for(int i=1;i<=n;i++){
for(int t1=m;t1>=t[i];t1--){
f[t1]=max(f[t1],f[t1-t[i]]+p[i]);
完全背包核心代码:
for(int i=1;i<=n;i++){
for(int t1=t[i];t1<=m;t1++){//注意这一行
f[t1]=max(f[t1],f[t1-t[i]]+p[i]);
总结:
这说明了完全背包和01背包的差别只有第二重for循环的差别。
在01背包中,t1从m一直减到t【i】,保证了每个物品在一个t1中只会被放一次。
而完全背包中,从t1一直加到m,使在可以放下的情况下尽量多地放。
🆗