The dynamic programming algorithm to optimally fill a knapsack works well in the case of one knapsack. But is there an efficient known algorithm that will optimally fill 2 knapsacks (capacities can be unequal)?
I have tried the following two approaches and neither of them is correct.
- First fill the first knapsack using the original DP algorithm to fill one knapsack and then fill the other knapsack.
- First fill a knapsack of size W1 + W2 and then split the solution into two solutions (where W1 and W2 are the capacities of the two knapsacks).
Problem statement (see also Knapsack Problem at Wikipedia):
-
We have to fill the knapsack with a set of items (each item has a weight and a value) so as to maximize the value that we can get from the items while having a total weight less than or equal to the knapsack size.
-
We cannot use an item multiple times.
- We cannot use a part of an item. We cannot take a fraction of an item. (Every item must be either fully included or not).
I will assume each of the
nitems can only be used once, and you must maximize your profit.Original knapsack is
dp[i] = best profit you can obtain for weight iNow, since we have two knapsacks, we can use
dp[i, j] = best profit you can obtain for weight i in knapsack 1 and j in knapsack 2Time complexity is
O(n * maxW1 * maxW2), wheremaxWis the maximum weight the knapsack can carry. Note that this isn’t very efficient if the capacities are large.