1
1
"""
2
2
Given weights and values of n items, put these items in a knapsack of capacity W to get the maximum total value in the knapsack.
3
+
4
+ Note that only the integer weights 0-1 knapsack problem is solvable using dynamic programming.
3
5
"""
6
+ from __future__ import print_function , division , absolute_import
7
+
4
8
5
- def MF_knapsack (i , wt , val , j ):
9
+ def MF_knapsack (i ,wt ,val ,j ):
6
10
'''
7
11
This code involves the concept of memory functions. Here we solve the subproblems which are needed
8
12
unlike the below example
@@ -13,8 +17,7 @@ def MF_knapsack(i, wt, val, j):
13
17
if j < wt [i - 1 ]:
14
18
val = MF_knapsack (i - 1 ,wt ,val ,j )
15
19
else :
16
- val = max (MF_knapsack (i - 1 , wt , val , j ),
17
- MF_knapsack (i - 1 , wt , val , j - wt [i - 1 ]) + val [i - 1 ])
20
+ val = max (MF_knapsack (i - 1 ,wt ,val ,j ),MF_knapsack (i - 1 ,wt ,val ,j - wt [i - 1 ]) + val [i - 1 ])
18
21
F [i ][j ] = val
19
22
return F [i ][j ]
20
23
@@ -123,8 +126,7 @@ def _construct_solution(dp, wt, i, j, optimal_set):
123
126
wt = [4 , 3 , 2 , 3 ]
124
127
n = 4
125
128
w = 6
126
- F = [[0 ]* (w + 1 )] + [[0 ] + [- 1 for i in range (w + 1 )] for j in range (n + 1 )]
127
-
129
+ F = [[0 ] * (w + 1 )] + [[0 ] + [- 1 for i in range (w + 1 )] for j in range (n + 1 )]
128
130
optimal_solution , _ = knapsack (w ,wt ,val , n )
129
131
print (optimal_solution )
130
132
print (MF_knapsack (n ,wt ,val ,w )) # switched the n and w
0 commit comments