Bird
Raised Fist0
DSA Typescriptprogramming~20 mins

Unbounded Knapsack Problem in DSA Typescript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Unbounded Knapsack Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Unbounded Knapsack DP Table
What is the final maximum value returned by this unbounded knapsack function for the given inputs?
DSA Typescript
function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number {
  const dp: number[] = new Array(W + 1).fill(0);
  for (let i = 0; i <= W; i++) {
    for (let j = 0; j < n; j++) {
      if (wt[j] <= i) {
        dp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j]);
      }
    }
  }
  return dp[W];
}

const W = 7;
const wt = [1, 3, 4];
const val = [10, 40, 50];
const n = wt.length;
console.log(unboundedKnapsack(W, wt, val, n));
A100
B90
C120
D80
Attempts:
2 left
💡 Hint
Think about how many times you can pick the item with weight 1 and value 10 to maximize value.
🧠 Conceptual
intermediate
1:30remaining
Understanding Unbounded Knapsack Item Choices
In the unbounded knapsack problem, why can items be chosen multiple times?
ABecause the problem allows unlimited quantity of each item to maximize value within weight limit.
BBecause items are duplicated in the input list to simulate multiple quantities.
CBecause the knapsack capacity is infinite, so all items fit.
DBecause the problem only considers the first occurrence of each item.
Attempts:
2 left
💡 Hint
Think about the difference between 0/1 knapsack and unbounded knapsack.
🔧 Debug
advanced
2:00remaining
Identify the Error in This Unbounded Knapsack Code
What error will this TypeScript code produce when run?
DSA Typescript
function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number {
  const dp: number[] = new Array(W + 1).fill(0);
  for (let i = 1; i <= W; i++) {
    for (let j = 0; j < n; j++) {
      if (wt[j] < i) {
        dp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j]);
      }
    }
  }
  return dp[W];
}

console.log(unboundedKnapsack(5, [5], [100], 1));
AInfinite loop occurs
BReturns 90 correctly
CReturns 0
DThrows runtime error: dp[i - wt[j]] is undefined
Attempts:
2 left
💡 Hint
Check the condition inside the inner loop carefully.
📝 Syntax
advanced
1:30remaining
Syntax Error in Unbounded Knapsack Code
Which option contains a syntax error preventing the code from compiling?
DSA Typescript
function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number {
  const dp: number[] = new Array(W + 1).fill(0);
  for (let i = 0; i <= W; i++) {
    for (let j = 0; j < n; j++) {
      if (wt[j] <= i) {
        dp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j]);
      }
    }
  }
  return dp[W];
}
Afor (let i = 0; i <= W; i++) {
Bif (wt[j] <= i) {
Cconst dp: number[] = new Array(W + 1).fill(0);
Ddp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j])
Attempts:
2 left
💡 Hint
Look for missing punctuation in the code lines.
🚀 Application
expert
3:00remaining
Maximum Value for Large Capacity with Given Items
Given items wt = [2, 3, 5], val = [50, 70, 100], and knapsack capacity W = 10, what is the maximum value achievable using unbounded knapsack?
A250
B300
C270
D200
Attempts:
2 left
💡 Hint
Try combinations of items that fill the capacity exactly or nearly exactly with maximum value.

Practice

(1/5)
1. What is the main difference between the 0/1 Knapsack Problem and the Unbounded Knapsack Problem?
easy
A. In Unbounded Knapsack, you can use unlimited copies of each item.
B. In Unbounded Knapsack, items cannot be repeated.
C. Unbounded Knapsack only works with fractional items.
D. Unbounded Knapsack has a fixed number of items to choose from.

Solution

  1. Step 1: Understand the item usage rules

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

    Unbounded Knapsack allows repeated use of the same item, unlike 0/1 Knapsack.
  3. Final Answer:

    In Unbounded Knapsack, you can use unlimited copies of each item. -> Option A
  4. Quick Check:

    Unlimited item usage = In Unbounded Knapsack, you can use unlimited copies of each item. [OK]
Hint: Unbounded means unlimited items allowed [OK]
Common Mistakes:
  • Confusing unbounded with fractional knapsack
  • Thinking items cannot repeat
  • Assuming fixed item count
2. Which of the following TypeScript function signatures correctly represents the Unbounded Knapsack function?
easy
A. function unboundedKnapsack(W: number, wt: string[], val: number[], n: number): number
B. function unboundedKnapsack(W: string, wt: number[], val: number[], n: number): number
C. function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number
D. function unboundedKnapsack(W: number, wt: number[], val: number[], n: string): number

Solution

  1. Step 1: Check parameter types for correctness

    Weight capacity W should be a number, weights wt and values val arrays of numbers, and n the number of items as a number.
  2. Step 2: Identify the correct signature

    function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number matches all types correctly. Others have wrong types like string instead of number.
  3. Final Answer:

    function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number -> Option C
  4. Quick Check:

    Correct types for all parameters = function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number [OK]
Hint: Check parameter types carefully [OK]
Common Mistakes:
  • Using string instead of number for weights or capacity
  • Mixing array types
  • Incorrect return type
3. What will be the output of the following TypeScript code snippet for Unbounded Knapsack?
const val = [10, 40, 50];
const wt = [1, 3, 4];
const W = 6;

function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number {
  const dp = Array(W + 1).fill(0);
  for (let i = 1; i <= W; i++) {
    for (let j = 0; j < n; j++) {
      if (wt[j] <= i) {
        dp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j]);
      }
    }
  }
  return dp[W];
}

console.log(unboundedKnapsack(W, wt, val, val.length));
medium
A. 90
B. 100
C. 120
D. 80

Solution

  1. Step 1: Understand the DP array construction

    We build dp array from 0 to W=6. For each capacity, we check all items and update dp[i] with max value including unlimited items.
  2. Step 2: Calculate dp values step-by-step

    dp[1]=max(0, dp[0]+10)=10
    dp[2]=max(0, dp[1]+10)=20
    dp[3]=max(dp[3], dp[0]+40)=40, also dp[3]=max(40, dp[2]+10)=40
    dp[4]=max(dp[4], dp[1]+40)=50, also dp[4]=max(50, dp[0]+50)=50
    dp[5]=max(dp[5], dp[2]+40)=60, also dp[5]=max(60, dp[1]+50)=60
    dp[6]=max(dp[6], dp[3]+40)=80, also dp[6]=max(80, dp[2]+50)=90
  3. Final Answer:

    90 -> Option A
  4. Quick Check:

    Max value for W=6 = 90 [OK]
Hint: Build dp array incrementally for each capacity [OK]
Common Mistakes:
  • Not considering multiple copies of items
  • Incorrect dp array updates
  • Mixing 0/1 and unbounded logic
4. Identify the bug in this Unbounded Knapsack TypeScript code snippet:
function unboundedKnapsack(W: number, wt: number[], val: number[], n: number): number {
  const dp = Array(W + 1).fill(0);
  for (let j = 0; j < n; j++) {
    for (let i = 1; i <= W; i++) {
      if (wt[j] <= i) {
        dp[i] = Math.max(dp[i], dp[i - wt[j]] + val[j]);
      }
    }
  }
  return dp[W];
}
medium
A. The condition wt[j] <= i should be wt[j] < i
B. Initialization of dp array is incorrect
C. Return statement should be dp[0] instead of dp[W]
D. Loops are reversed; inner loop should be over items, outer over capacity

Solution

  1. Step 1: Analyze loop order for unbounded knapsack

    For unbounded knapsack, outer loop should iterate over capacities (i), inner loop over items (j) to allow multiple uses of items.
  2. Step 2: Identify the bug in loop order

    Here, outer loop is over items and inner over capacity, which is incorrect and leads to wrong results.
  3. Final Answer:

    Loops are reversed; inner loop should be over items, outer over capacity -> Option D
  4. Quick Check:

    Correct loop order = capacity outer, items inner [OK]
Hint: Outer loop on capacity for unbounded knapsack [OK]
Common Mistakes:
  • Swapping loop order
  • Wrong dp initialization
  • Incorrect return index
5. Given items with values val = [5, 10, 15] and weights wt = [1, 3, 4], and a knapsack capacity W = 7, what is the maximum value achievable using the Unbounded Knapsack approach?
hard
A. 25
B. 30
C. 35
D. 40

Solution

  1. Step 1: Calculate dp array values for capacities 1 to 7

    dp[0]=0
    dp[1]=max(0, dp[0]+5)=5
    dp[2]=max(0, dp[1]+5)=10
    dp[3]=max(dp[3], dp[0]+10)=10, also dp[3]=max(10, dp[2]+5)=10
    dp[4]=max(dp[4], dp[1]+10)=15, also dp[4]=max(15, dp[0]+15)=15
    dp[5]=max(dp[5], dp[2]+10)=20, also dp[5]=max(20, dp[1]+15)=20
    dp[6]=max(dp[6], dp[3]+10)=20, also dp[6]=max(20, dp[2]+15)=25
    dp[7]=max(dp[7], dp[4]+10)=25, also dp[7]=max(25, dp[3]+15)=25
  2. Step 2: Find maximum value at capacity 7

    The maximum value achievable is 25, but check if better combinations exist:
    Try dp[7] = dp[3] + val[2] = 10 + 15 = 25
    Try dp[7] = dp[4] + val[1] = 15 + 10 = 25
    Try dp[7] = dp[6] + val[0] = 25 + 5 = 30 (better)
    Update dp[7] = 30
    Try dp[7] = dp[3] + val[2] = 10 + 15 = 25 (less than 30)
    So final dp[7] = 30
  3. Final Answer:

    30 -> Option B
  4. Quick Check:

    Maximum value for W=7 = 30 [OK]
Hint: Check all item combinations for each capacity [OK]
Common Mistakes:
  • Ignoring multiple item usage
  • Stopping at first max value found
  • Not updating dp array correctly
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