博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三讲 多重背包问题(对背包九讲的学习)
阅读量:6258 次
发布时间:2019-06-22

本文共 694 字,大约阅读时间需要 2 分钟。

题目

有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

基本思路:

对每个物品都考虑拿几个(这个很好理解)

递推式:f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k<=n[i]}

时间复杂度是O(V*Σn[i])

转换为为01背包问题:

这里利用了二进制的性质优化

时间复杂度:O(V*Σlog n[i])

 

例子1:(注意看数字的颜色)

 

7个物品i的多重背包问题=01背包问题(物品1=1个物品i,物品2=2个物品i,物品3=4个物品i,,,)

2^0+2^1+2^2=7  7-7=0,不用补了

 

例子2:

8个物品i的多重背包问题=01背包问题(物品1=1个物品i,物品2=2个物品i,物品3=4个物品i,物品4=1个物品i)//蓝色地方是补到8

1+2+4=7 < 8    8-7=1,再1

注意每次选的时候还是要判断是否空间超出了

 

例子3:

5个物品i的多重背包问题=01背包问题(物品1=1个物品i,物品2=2个物品i,物品3=2个物品i)//蓝色地方是补到5

1+2=3<5  5-3=2,再补个2

比方说例子3我们看到了,物品1,物品2,物品3可以组合成0~5的任何数

这样一来,就从多重背包转换成了01背包

 继续优化:

图片截图自 背包九讲

最后那个O(Vn)的方法我还没学,先放着,以后其他学完了再学他

 

转载于:https://www.cnblogs.com/zyacmer/p/10011362.html

你可能感兴趣的文章
【VMC实验室】在QCloud上创建您的SQL Cluster(4)
查看>>
我的友情链接
查看>>
卢松松:每个网站都该有个监测服务
查看>>
Memcache与MySQL并肩作战
查看>>
使用Android模拟器测试Linux驱动(1)
查看>>
验证码广告:站长增加收入新渠道
查看>>
objective-c 枚举王国遍历数组
查看>>
C# WinForm开发系列 - OWC
查看>>
关于利用VS2008创建项目遇到的小困惑备忘
查看>>
发布一款域名监控小工具——Domain(IP)Watcher
查看>>
VBS中数组的各种处理方式
查看>>
通用数据权限管理系统设计
查看>>
High Resolution Timer in Java 5
查看>>
Visio2010绘制上下文数据流图
查看>>
SQL高级---SQL TOP 子句
查看>>
EhCache 分布式缓存/缓存集群
查看>>
[读书笔记]黑客与画家-思维、财富、创业、产品、设计、编程
查看>>
ecshop index.php源代码分析
查看>>
POJ 2057 The Lost House (经典树形dp)
查看>>
C#与Java的比较(转)
查看>>