Python Program for 0-1 Knapsack Problem
# A naive recursive implementation of 0-1 Knapsack Problem # Returns the maximum value that can be put in a knapsack of # capacity W def knapSack(W, wt, val, n): # Base Case if n = = 0 or W = = 0 : return 0 # If weight of the nth item is more than Knapsack of capacity # W, then this item cannot be included in the optimal solution if (wt[n - 1 ] > W): return knapSack(W, wt, val, n - 1 ) # return the maximum of two cases: # (1) nth item included # (2) not included else : return max (val[n - 1 ] + knapSack(W - wt[n - 1 ], wt, val, n - 1 ), knapSack(W, wt, val, n - 1 )) # end of function knapSack # To test above function val = [ 60 , 100 , 120 ] wt = [ 10 , 20 , 30 ] W = 50 n = len (val) print knapSack(W, wt, val, n) # This code is contributed by Nikhil Kumar Singh |
Output:
220
# A Dynamic Programming based Python # Program for 0-1 Knapsack problem # Returns the maximum value that can # be put in a knapsack of capacity W def knapSack(W, wt, val, n): K = [[ 0 for x in range (W + 1 )] for x in range (n + 1 )] # Build table K[][] in bottom up manner for i in range (n + 1 ): for w in range (W + 1 ): if i = = 0 or w = = 0 : K[i][w] = 0 elif wt[i - 1 ] < = w: K[i][w] = max (val[i - 1 ] + K[i - 1 ][w - wt[i - 1 ]], K[i - 1 ][w]) else : K[i][w] = K[i - 1 ][w] return K[n][W] # Driver program to test above function val = [ 60 , 100 , 120 ] wt = [ 10 , 20 , 30 ] W = 50 n = len (val) print (knapSack(W, wt, val, n)) # This code is contributed by Bhavya Jain |
Output:
220
Please refer complete article on Dynamic Programming | Set 10 ( 0-1 Knapsack Problem) for more details!