Search⌘ K
AI Features

Challenge: The 0/1 Knapsack Problem

Explore the 0 1 knapsack problem to understand dynamic programming techniques. Learn to approach this classic coding interview challenge by developing solutions that maximize profit without exceeding weight capacity. This lesson guides you through a step-by-step problem-solving method to prepare you for real interview scenarios.

Welcome to your first dynamic programming problem! Remember to work your way up to the correct solution. It might help to think of the brute force solution first, then memoize it or tabulate it. The process of coming up with a solution to a problem like this would be similar in a real interview. Remember, you can discuss it with your interviewer and talk out loud while you’re implementing the solution. Good luck!

P.S changing the prototype of the given function would result in an error. If the need to change it arises, create another function and call it from the one that is given.

Problem Statement

We’ve already covered the fractional knaspack problem in the greedy algorithms chapter. Let’s now look at the 0/1 knapsack problem. Imagine that you’re a burglar at a jewelry store with a knapsack. Your goal is to choose a combination of jewelry that results in the most profit. Let’s see how you would code this problem.

Given two integer arrays that represent the weights and profits of N items, implement a function knapSack() that finds a subset of these items which will give us the maximum profit so that their cumulative weight is not more than a given number capacity. Each item can only be selected once, which means we either skip it or put it in the knapsack.

Input

  1. The profit that can be gained by each piece of the jewelry
  2. The number of pieces of jewelry
  3. The weight of each piece of jewelry
  4. The maximum weight that the knapsack can hold
  5. The length of the array

Output

The maximum profit that can be returned.

Sample Input

    int profit[] = {60, 100, 120}; 
    int profitsLength;
    int weight[] = {10, 20, 30}; 
    int weightsLength;
    int capacity = 50; 

Sample Output

    220

Coding Exercise

Take a close look and design a step-by-step algorithm before jumping on to the implementation. This problem is designed for your practice, so try to solve it on your own first. If you get stuck, you can always refer to the hint and solution provided in the code tab. Good Luck!

C++
#include <iostream>
#include <string>
using namespace std;
int knapSack(int profits[], int profitsLength, int weights[], int capacity) {
// Write your code here
}