背包问题是这样的:背包有一个重量的约束,不能无限制的装入物品,被装的物品是不可以切割的,整体的装或者不装。另外如果物品数量没有限制的话,那其实就是一个完全背包问题,如果数量有限制,只能装进去1次或者不装进去那这就是零一背包问题,现在我们研究完全背包问题。
一、实例分析
现在我们看这个实例,有一个物品重量是:2,价值是:1(省去单位),第二个物品重量是:3,价值是:3(省去单位)。总限制b是:10。所以现在就是装第三个物品W3,就可以装第一个和第二个物品(4+3+2<10),而不能装第四个物品(4+7>10)。现在就需要想办法怎么去选择这些物品装到背包里面能达到最大。
二、建模
解是<x1, x2,…, xn>,其中xi 是装入背包的第 i 种物品个数
线性规划问题: 由线性条件约束的线性函
数取最大或最小的问题
整数规划问题: 线性规划问题的变量 xi
都是非负整数
追踪算法
输入: ik (y)表, k=1,2,…,n, y=1,2,…,b
输出: x1, x2,…,xn,n种物品的装入量
1. for k←1 to n do xk← 0
2. y←b, k←n
3. j←ik (y)
4. xk ←1
5. y←y- wk
6. while ik(y)=k do
7. y←y-wk
8. xk←xk+ 1
9. if ik(y)≠0 then goto 4