DP #02. 0 1 Knapsack problem - mbhushan/dynpro GitHub Wiki
(2). 0/1 Knapsack problem
Given a bag with weight W and a list of items having a certain
weight and value, how would you fill the bag so that you have
maximum value?
Another variation of this problem is unbounded knapsack problem
where an item can be repeated which is much simpler in the sense
just take the value/weight ratio for each item then sort them in
decreasing order and keep adding the item until you have no
capacity left.
(Weight, Value) |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
(1, 1) |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
(3, 4) |
0 |
1 |
1 |
4 |
5 |
5 |
5 |
5 |
(4, 5) |
0 |
1 |
1 |
4 |
5 |
6 |
6 |
9 |
(5, 7) |
0 |
1 |
1 |
4 |
5 |
7 |
8 |
9 |
Formula:
i denotes row and j column.
Row would be the list of items. wt(i),val(i)
Col would be weights from 0 to W (capacity of the bag).
If (wt[i] > j) {
T[i][j] = T[i-1][j]
} else {
T[i][j] = Max(
T[i-1][j - wt[i]] + val[i],
T[i-1][j]
);
}
- Time complexity - O(W*total items)
Knapsack - 0/1