Bird
Raised Fist0
DSA Javaprogramming~5 mins

Unbounded Knapsack Problem in DSA Java - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main difference between the Unbounded Knapsack Problem and the 0/1 Knapsack Problem?
In the Unbounded Knapsack Problem, you can use unlimited copies of each item, whereas in the 0/1 Knapsack Problem, each item can be used at most once.
Click to reveal answer
beginner
What does the 'unbounded' term mean in the Unbounded Knapsack Problem?
It means you can take any number of copies of each item without limit, as long as the total weight does not exceed the knapsack capacity.
Click to reveal answer
intermediate
In the Unbounded Knapsack Problem, if you have items with weights [2, 3] and values [10, 15], and knapsack capacity 5, what is the maximum value you can get?
You can take one item of weight 2 (value 10) and one item of weight 3 (value 15) for total weight 5 and value 25, or two items of weight 2 (value 20). So maximum value is 25.
Click to reveal answer
intermediate
What is the time complexity of the dynamic programming solution for the Unbounded Knapsack Problem?
The time complexity is O(n * W), where n is the number of items and W is the knapsack capacity.
Click to reveal answer
intermediate
Why does the Unbounded Knapsack Problem use a different approach than 0/1 Knapsack in dynamic programming?
Because items can be chosen multiple times, the solution reuses the same item in the subproblems, so the DP formula considers the current item again after including it.
Click to reveal answer
In the Unbounded Knapsack Problem, can an item be chosen more than once?
AYes, unlimited times
BNo, only once
COnly twice
DDepends on the item
What does the dynamic programming array represent in the Unbounded Knapsack Problem?
ATotal number of items
BNumber of items chosen
CMinimum weight for each value
DMaximum value for each capacity up to W
Which of these is the correct recurrence relation for Unbounded Knapsack DP?
Adp[w] = dp[w] + value[i]
Bdp[w] = max(dp[w], dp[w - weight[i]] + value[i])
Cdp[w] = max(dp[w], dp[w - weight[i]] - value[i])
Ddp[w] = dp[w - weight[i]] + value[i]
What is the base case for the DP array in Unbounded Knapsack?
Adp[capacity] = 0
Bdp[0] = -1
Cdp[0] = 0
Ddp[capacity] = value of first item
If you have an item with weight 1 and value 10, and knapsack capacity 3, what is the maximum value?
A30
B10
C20
D0
Explain how dynamic programming solves the Unbounded Knapsack Problem step-by-step.
Think about how you build the solution from smaller capacities to larger.
You got /5 concepts.
    Describe the difference in approach between 0/1 Knapsack and Unbounded Knapsack in dynamic programming.
    Focus on how item reuse changes the DP update.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main difference between the Unbounded Knapsack Problem and the 0/1 Knapsack Problem?
      easy
      A. In Unbounded Knapsack, items can be chosen multiple times; in 0/1 Knapsack, each item can be chosen only once.
      B. Unbounded Knapsack does not consider item weights, while 0/1 Knapsack does.
      C. 0/1 Knapsack allows fractional items, Unbounded Knapsack does not.
      D. Unbounded Knapsack always has a smaller maximum value than 0/1 Knapsack.

      Solution

      1. Step 1: Understand item selection rules

        In 0/1 Knapsack, each item can be selected at most once. In Unbounded Knapsack, items can be selected unlimited times.
      2. Step 2: Compare problem constraints

        Unbounded Knapsack allows multiple copies of the same item, which is the key difference from 0/1 Knapsack.
      3. Final Answer:

        In Unbounded Knapsack, items can be chosen multiple times; in 0/1 Knapsack, each item can be chosen only once. -> Option A
      4. Quick Check:

        Unbounded = multiple items allowed [OK]
      Hint: Remember: Unbounded means unlimited item picks [OK]
      Common Mistakes:
      • Confusing 0/1 Knapsack with fractional knapsack
      • Thinking Unbounded Knapsack disallows repeated items
      • Assuming weights are ignored in Unbounded Knapsack
      2. Which of the following is the correct syntax to initialize the DP array for Unbounded Knapsack in Java for capacity W?
      easy
      A. int[] dp = new int[W];
      B. int dp = new int[W];
      C. int[] dp = new int[W+1];
      D. int dp[] = new int[W-1];

      Solution

      1. Step 1: Understand array size for capacities

        We need an array to store max values for capacities from 0 to W, so size must be W+1.
      2. Step 2: Check Java array syntax

        Correct syntax is int[] dp = new int[W+1]; which creates an integer array of size W+1.
      3. Final Answer:

        int[] dp = new int[W+1]; -> Option C
      4. Quick Check:

        Array size = W+1 for capacities 0 to W [OK]
      Hint: DP array size = capacity + 1 for indexing [OK]
      Common Mistakes:
      • Using incorrect array size (W or W-1)
      • Wrong Java array declaration syntax
      • Declaring dp as int instead of int[]
      3. What is the output of the following Java code snippet for Unbounded Knapsack?
      int[] wt = {2, 3, 4};
      int[] val = {15, 20, 30};
      int W = 7;
      int[] dp = new int[W+1];
      for (int i = 0; i <= W; i++) {
          for (int j = 0; j < wt.length; j++) {
              if (wt[j] <= i) {
                  dp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j]);
              }
          }
      }
      System.out.println(dp[W]);
      medium
      A. 50
      B. 75
      C. 85
      D. 90

      Solution

      1. Step 1: Understand DP array filling

        For each capacity i from 0 to 7, we try all items and update dp[i] with max value including unlimited items.
      2. Step 2: Calculate dp values step-by-step

        dp[0]=0; dp[1]=0; dp[2]=max(0, dp[0]+15)=15; dp[3]=max(0, dp[1]+15, dp[0]+20)=20; dp[4]=max(0, dp[2]+15, dp[1]+20, dp[0]+30)=30; dp[5]=max(dp[3]+15=35, dp[2]+20=35, dp[1]+30=30)=35; dp[6]=max(dp[4]+15=45, dp[3]+20=40, dp[2]+30=45)=45; dp[7]=max(dp[5]+15=50, dp[4]+20=50, dp[3]+30=50)=50.
      3. Step 3: Recalculate carefully for correct max

        Rechecking dp[7]: dp[7] = max(dp[7], dp[7-2]+15=dp[5]+15=35+15=50, dp[7-3]+20=dp[4]+20=30+20=50, dp[7-4]+30=dp[3]+30=20+30=50) = 50.
      4. Final Answer:

        50 -> Option A
      5. Quick Check:

        Max value for W=7 is 50 [OK]
      Hint: Trace dp array updates for each capacity [OK]
      Common Mistakes:
      • Miscomputing dp values for capacities
      • Ignoring multiple item picks
      • Mixing up weights and values
      4. Identify the bug in this Unbounded Knapsack Java code snippet:
      int[] wt = {1, 3, 4};
      int[] val = {10, 40, 50};
      int W = 6;
      int[] dp = new int[W+1];
      for (int i = 0; i < W; i++) {
          for (int j = 0; j < wt.length; j++) {
              if (wt[j] <= i) {
                  dp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j]);
              }
          }
      }
      System.out.println(dp[W]);
      medium
      A. dp array size should be W, not W+1
      B. Loop should run i <= W, not i < W
      C. Condition should be wt[j] < i, not wt[j] <= i
      D. Inner loop should start from 1, not 0

      Solution

      1. Step 1: Check loop range for capacity i

        The outer loop runs from i=0 to i<W, so it stops at i=5, missing capacity W=6.
      2. Step 2: Correct loop condition

        To include capacity W=6, loop should run i <= W, i.e., i from 0 to 6 inclusive.
      3. Final Answer:

        Loop should run i <= W, not i < W -> Option B
      4. Quick Check:

        Loop must cover capacity W [OK]
      Hint: Loop to W inclusive for full capacity coverage [OK]
      Common Mistakes:
      • Using i < W misses last capacity
      • Wrong dp array size causing index errors
      • Incorrect condition in if statement
      5. Given weights wt = {1, 3, 4}, values val = {10, 40, 50}, and capacity W = 7, what is the maximum value achievable using the Unbounded Knapsack approach?
      hard
      A. 140
      B. 120
      C. 110
      D. 90

      Solution

      1. Step 1: Initialize dp array and compute values

        dp[0]=0; For each capacity i from 1 to 7, calculate max value by trying all items multiple times.
      2. Step 2: Calculate dp values stepwise

        dp[1]=max(dp[1], dp[0]+10)=10; dp[2]=max(dp[2], dp[1]+10)=20; dp[3]=max(dp[3], dp[0]+40, dp[2]+10)=40; dp[4]=max(dp[4], dp[1]+40, dp[0]+50, dp[3]+10)=50; dp[5]=max(dp[5], dp[2]+40, dp[1]+50, dp[4]+10)=60; dp[6]=max(dp[6], dp[3]+40, dp[2]+50, dp[5]+10)=80; dp[7]=max(dp[7], dp[4]+40, dp[3]+50, dp[6]+10)=90.
      3. Step 3: Recalculate carefully for max value

        Check dp[7]: dp[7]=max(dp[7], dp[6]+10=80+10=90, dp[4]+40=50+40=90, dp[3]+50=40+50=90) = 90. But we can try combinations: 3*3 + 1*1 weights = 3+3+1=7, values = 40+40+10=90; or 4+3 weights = 7, values=50+40=90. So max is 90.
      4. Final Answer:

        90 -> Option D
      5. Quick Check:

        Max value for W=7 is 90 [OK]
      Hint: Try all item combos for each capacity [OK]
      Common Mistakes:
      • Not considering multiple item picks
      • Miscomputing dp values for capacities
      • Ignoring best combination of items
      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