01背包,完全背包的区别

这篇博客深入探讨了背包问题中的01背包和完全背包。01背包中,物品只能取一次,代码中通过减少容量t1确保每个物品仅放入一次。而在完全背包中,物品可以无限次选取,代码中增加t1来尽可能多放置物品。两者的区别主要在于循环条件,完全背包允许物品重复放入,以最大化价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文字上的理解:
**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,使在可以放下的情况下尽量多地放。
🆗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值