Professional Documents
Culture Documents
(Dynamic Programming)
Knapsack problem
Given some items, pack the knapsack to get
the maximum total value. Each item has some
weight and some value. Total weight that we can
carry is no more than some fixed number W.
So we must consider weights of items as well as
their values.
Item #
1
2
3
Weight Value
1
8
3
6
5
5
2
Knapsack problem
There are two versions of the problem:
1. 0-1 knapsack problem
Dynamic Programming
max bi subject to wi W
iT
iT
Defining a Subproblem
Example
Lets run our algorithm on the
following data:
n = 4 (# of elements)
W = 5 (max weight)
Elements (weight, benefit):
(2,3), (3,4), (4,5), (5,6)
10
Example (2)
i\W 0
0
0
1
2
3
4
1
0
2
0
3
0
4
0
5
0
for w = 0 to W
V[0,w] = 0
11
Example (3)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
2
0
3
0
4
0
5
0
for i = 1 to n
V[i,0] = 0
12
Example (4)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
0
4
0
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=1
w-wi =-1
Example (5)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
4
0
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=2
w-wi =0
Example (6)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
3
4
0
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=3
w-wi =1
Example (7)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
3
4
0
3
5
0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=4
w-wi =2
Example (8)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
2
0
3
3
0
3
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
bi=3
wi=2
w=5
w-wi =3
Example (9)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
0
3
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=1
w-wi =-2
Example (10)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=2
w-wi =-1
Example (11)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
4
0
3
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=3
w-wi =0
Example (12)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
4
0
3
4
5
0
3
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=4
w-wi =1
Example (13)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
2
0
3
3
3
0
3
4
4
0
3
4
5
0
3
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
bi=4
wi=3
w=5
w-wi =2
Example (14)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
2
0
3
3
3
3
0
3
4
4
4
0
3
4
5
0
3
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
bi=5
wi=4
w= 1..3
Example (15)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
2
0
3
3
3
3
0
3
4
4
4
0
3
4
5
5
0
3
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
bi=5
wi=4
w= 4
w- wi=0
Example (16)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
2
0
3
3
3
3
0
3
4
4
4
0
3
4
5
5
0
3
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
bi=5
wi=4
w= 5
w- wi=1
Example (17)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
bi=6
wi=5
w= 1..4
Example (18)
i\W
0
1
2
3
4
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
bi=6
wi=5
w= 5
w- wi=0
Comments
28
29
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
k= 5
bi=6
wi=5
V[i,k] = 7
V[i1,k] =7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
mark the ith item as in the knapsack
i = i1, k = k-wi
else
i = i1
30
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=4
k= 5
bi=6
wi=5
V[i,k] = 7
V[i1,k] =7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
mark the ith item as in the knapsack
i = i1, k = k-wi
else
i = i 1
31
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=3
k= 5
bi=5
wi=4
V[i,k] = 7
V[i1,k] =7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
mark the ith item as in the knapsack
i = i1, k = k-wi
else
i = i 1
32
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=2
k= 5
bi=4
wi=3
V[i,k] = 7
V[i1,k] =3
k wi=2
33
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
i=1
k= 2
bi=3
wi=2
V[i,k] = 3
V[i1,k] =0
k wi=0
34
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
i=0
k= 0
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
The optimal
knapsack
should contain
{1, 2}
35
0
0
0
0
0
0
1
0
0
0
0
0
2
0
3
3
3
3
3
0
3
4
4
4
4
0
3
4
5
5
5
0
3
7
7
7
i=n, k=W
while i,k > 0
if V[i,k] V[i1,k] then
Items:
1: (2,3)
2: (3,4)
3: (4,5)
4: (5,6)
The optimal
knapsack
should contain
{1, 2}
36
Conclusion
37