0/1 Knapsack Problem in Dynamic Programming

Yasir
2 min readJan 17, 2021

In this article you will see how to solve knapsack problem by memoization .

Photo by Markus Spiske on Unsplash

Problem Statement

You have given a bag of capacity ‘W’ . And also you have ’n’ items with ‘w’ weights and ‘v’ values . You need to fill the bag with maximum values without crossing the capacity weight .

Recursive Approach

In this approach , we will try to find all the possibilities using recursion .

def knapSack(W, wt, val, n):    if n == 0 or W == 0 :
return 0

if (wt[n-1] > W):
return knapSack(W, wt, val, n-1)
else:
return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),knapSack(W, wt, val, n-1))

The above approach takes O(n²) time , which is not fast .

Dynamic Programming Approach

Now lets try to solve this problem in polynomial time using memorization .

def knapSack(W, wt, val, n):
K = [[0 for x in range(W + 1)] for x in range(n + 1)]
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]

Where to Go From Here

My GitHub: https://github.com/myawesomehub

My Writing : Link

Keep following to get more useful articles 👍
Thanks You !

--

--

Yasir

Exploring the Swift, SwiftUI, and Apple universe.