Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

0 1 Knapsack Problem in DSA Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the '0 1' in the 0 1 Knapsack Problem mean?
It means each item can either be taken completely (1) or not taken at all (0). No partial items are allowed.
Click to reveal answer
beginner
What is the main goal of the 0 1 Knapsack Problem?
To maximize the total value of items placed in the knapsack without exceeding its weight capacity.
Click to reveal answer
intermediate
In the dynamic programming solution of 0 1 Knapsack, what does the DP table represent?
Each cell dp[i][w] represents the maximum value achievable using the first i items with a weight limit w.
Click to reveal answer
intermediate
Why can't we use a greedy approach for the 0 1 Knapsack Problem?
Because choosing items based on value or weight alone may not lead to the optimal solution when items can't be split.
Click to reveal answer
intermediate
What is the time complexity of the classic dynamic programming solution for the 0 1 Knapsack Problem?
O(n * W), where n is the number of items and W is the maximum weight capacity of the knapsack.
Click to reveal answer
In the 0 1 Knapsack Problem, what does the '1' represent?
ATaking an item completely
BTaking half of an item
CNot taking any item
DTaking multiple copies of an item
Which approach is commonly used to solve the 0 1 Knapsack Problem optimally?
ADivide and Conquer
BGreedy Algorithm
CBrute Force without optimization
DDynamic Programming
What does dp[i][w] represent in the DP table for 0 1 Knapsack?
AMaximum value with first i items and weight limit w
BMinimum weight to achieve value w with i items
CNumber of items chosen for weight w
DTotal weight of first i items
What is the main constraint in the 0 1 Knapsack Problem?
ATotal value must be less than capacity
BItems can be split into fractions
CTotal weight of chosen items must not exceed knapsack capacity
DAll items must be chosen
Why is the greedy approach not suitable for the 0 1 Knapsack Problem?
ABecause greedy is too slow
BBecause items cannot be split and greedy may miss optimal combinations
CBecause greedy always picks all items
DBecause greedy requires sorting by weight only
Explain how the dynamic programming table is built for the 0 1 Knapsack Problem.
Think about how you decide to take or skip each item for every weight limit.
You got /4 concepts.
    Describe why the 0 1 Knapsack Problem cannot be solved optimally by a greedy method.
    Consider an example where picking the best item first leads to a worse total value.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the 0 1 Knapsack problem aim to maximize given a set of items with weights and values?
      easy
      A. The minimum weight of items selected
      B. The total weight of items without exceeding the value limit
      C. The number of items selected regardless of weight
      D. The total value of items without exceeding the weight limit

      Solution

      1. Step 1: Understand the problem goal

        The 0 1 Knapsack problem tries to select items to maximize total value without exceeding the weight capacity.
      2. Step 2: Identify the constraint

        The constraint is the maximum weight the knapsack can carry, so total weight must not exceed this limit.
      3. Final Answer:

        The total value of items without exceeding the weight limit -> Option D
      4. Quick Check:

        Maximize value under weight limit = The total value of items without exceeding the weight limit [OK]
      Hint: Maximize value, not weight, under capacity limit [OK]
      Common Mistakes:
      • Confusing weight limit with value limit
      • Trying to maximize weight instead of value
      • Ignoring the weight constraint
      2. Which of the following TypeScript function signatures correctly represents the 0 1 Knapsack function?
      easy
      A. function knapsack(weights: number[], values: number[], capacity: number): number
      B. function knapsack(weights: number, values: number, capacity: number[]): number[]
      C. function knapsack(weights: string[], values: string[], capacity: string): string
      D. function knapsack(weights: number[], values: number[], capacity: string): void

      Solution

      1. Step 1: Check parameter types

        Weights and values should be arrays of numbers, capacity a number, and return type a number representing max value.
      2. Step 2: Match correct signature

        function knapsack(weights: number[], values: number[], capacity: number): number matches this: arrays for weights and values, number for capacity, returns number.
      3. Final Answer:

        function knapsack(weights: number[], values: number[], capacity: number): number -> Option A
      4. Quick Check:

        Correct types and return = function knapsack(weights: number[], values: number[], capacity: number): number [OK]
      Hint: Weights and values are number arrays; capacity is a number [OK]
      Common Mistakes:
      • Using string types instead of number
      • Swapping array and single number types
      • Incorrect return type
      3. What is the output of the following TypeScript code snippet for 0 1 Knapsack?
      const weights = [1, 3, 4];
      const values = [15, 50, 60];
      const capacity = 5;
      
      function knapsack(w: number[], v: number[], c: number): number {
        const n = w.length;
        const dp = Array(n + 1).fill(null).map(() => Array(c + 1).fill(0));
        for (let i = 1; i <= n; i++) {
          for (let j = 1; j <= c; j++) {
            if (w[i - 1] <= j) {
              dp[i][j] = Math.max(dp[i - 1][j], v[i - 1] + dp[i - 1][j - w[i - 1]]);
            } else {
              dp[i][j] = dp[i - 1][j];
            }
          }
        }
        return dp[n][c];
      }
      
      console.log(knapsack(weights, values, capacity));
      medium
      A. 65
      B. 60
      C. 75
      D. 50

      Solution

      1. Step 1: Understand DP table filling

        For capacity 5, items: (1,15), (3,50), (4,60). Check combinations: - Item1 + Item2: weight 4, value 65 - Item3 alone: weight 4, value 60 - Item2 alone: weight 3, value 50 - Item1 + Item3: weight 5, value 75
      2. Step 2: Find max value under capacity

        Item1 + Item3 total weight 5, value 75 is max possible under capacity 5.
      3. Final Answer:

        75 -> Option C
      4. Quick Check:

        Max value with capacity 5 = 75 [OK]
      Hint: Check all item combos fitting capacity, pick max value [OK]
      Common Mistakes:
      • Ignoring combined items
      • Choosing single highest value item only
      • Miscomputing weights or values
      4. Identify the bug in this 0 1 Knapsack TypeScript function and select the fix:
      function knapsack(weights: number[], values: number[], capacity: number): number {
        const n = weights.length;
        const dp = Array(n + 1).fill([]).map(() => Array(capacity + 1).fill(0));
        for (let i = 1; i <= n; i++) {
          for (let w = 1; w <= capacity; w++) {
            if (weights[i - 1] <= w) {
              dp[i][w] = Math.max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]]);
            } else {
              dp[i][w] = dp[i - 1][w];
            }
          }
        }
        return dp[n][capacity];
      }
      medium
      A. Change Array(n + 1).fill([]) to Array(n + 1).fill(null)
      B. Change Array(n + 1).fill([]) to Array(n + 1).fill([]).map(() => Array(capacity + 1).fill(0))
      C. No bug, code is correct
      D. Change Array(n + 1).fill([]) to Array(n + 1).fill(0)

      Solution

      1. Step 1: Examine the dp array initialization

        The code uses Array(n + 1).fill([]).map(() => Array(capacity + 1).fill(0)), but fill([]) fills all elements with the same array reference, which is then overridden by map creating new arrays. However, the initial fill([]) is unnecessary and can cause confusion or bugs if map is removed.
      2. Step 2: Correct initialization

        Better to initialize dp as Array(n + 1).fill(null).map(() => Array(capacity + 1).fill(0)) or directly with map to ensure independent arrays without shared references.
      3. Final Answer:

        Change Array(n + 1).fill([]) to Array(n + 1).fill([]).map(() => Array(capacity + 1).fill(0)) -> Option B
      4. Quick Check:

        Ensure dp rows are independent arrays to avoid shared reference bugs [OK]
      Hint: Use map to create independent arrays for dp rows [OK]
      Common Mistakes:
      • Assuming fill([]) creates independent arrays
      • Ignoring shared reference issues
      • Claiming no bug when shared references exist
      5. Given items with weights [2, 3, 5, 7] and values [10, 5, 15, 7], and a knapsack capacity of 10, which set of items maximizes value without exceeding capacity?
      hard
      A. Items with weights 2, 3, and 5 (total value 30)
      B. Items with weights 3 and 7 (total value 12)
      C. Items with weights 5 and 7 (total value 22)
      D. Items with weights 2 and 7 (total value 17)

      Solution

      1. Step 1: Calculate total weights and values for each option

        Items with weights 2, 3, and 5 (total value 30): weights 2+3+5=10, values 10+5+15=30 Items with weights 3 and 7 (total value 12): weights 3+7=10, values 5+7=12 Items with weights 5 and 7 (total value 22): weights 5+7=12 (exceeds capacity) Items with weights 2 and 7 (total value 17): weights 2+7=9, values 10+7=17
      2. Step 2: Choose max value under capacity

        Items with weights 2, 3, and 5 (total value 30) fits capacity exactly and has highest value 30.
      3. Final Answer:

        Items with weights 2, 3, and 5 (total value 30) -> Option A
      4. Quick Check:

        Max value under capacity 10 = 30 [OK]
      Hint: Sum weights ≤ capacity; pick max value combo [OK]
      Common Mistakes:
      • Choosing items exceeding capacity
      • Ignoring combined item values
      • Selecting fewer items with lower total value
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard