📖 Scenario: You are helping a shop owner who wants to fill a knapsack with items to maximize value. The shop owner can take unlimited quantities of each item.Each item has a weight and a value. The knapsack has a maximum weight capacity.
🎯 Goal: Build a Java program that uses dynamic programming to solve the unbounded knapsack problem. The program will find the maximum value achievable with unlimited items and given capacity.
📋 What You'll Learn
Create arrays for item weights and values
Create an integer variable for knapsack capacity
Use a dynamic programming array to store maximum values for capacities
Implement the unbounded knapsack logic using loops
Print the maximum value for the full capacity
💡 Why This Matters
🌍 Real World
This problem models situations like packing goods for shipping, budgeting resources, or cutting materials where you can use unlimited quantities of items.
💼 Career
Understanding dynamic programming and knapsack problems is important for software engineers working on optimization, resource allocation, and algorithm design.
Progress0 / 4 steps
1
Create item weights and values arrays
Create an integer array called weights with values {2, 3, 4} and an integer array called values with values {40, 50, 100}.
DSA Java
Hint
Use int[] to create arrays and assign the exact values given.
2
Set knapsack capacity
Create an integer variable called capacity and set it to 7.
DSA Java
Hint
Use int capacity = 7; to set the knapsack capacity.
3
Implement unbounded knapsack logic
Create an integer array called dp of size capacity + 1. Use a for loop with variable w from 1 to capacity. Inside it, use a for loop with variable i from 0 to weights.length - 1. If weights[i] <= w, update dp[w] to the maximum of dp[w] and dp[w - weights[i]] + values[i].
DSA Java
Hint
Use nested loops and update dp[w] with the best value found.
4
Print the maximum value
Print the value of dp[capacity] using System.out.println(dp[capacity]);.
DSA Java
Hint
Print the maximum value stored at dp[capacity].
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
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.
Step 2: Compare problem constraints
Unbounded Knapsack allows multiple copies of the same item, which is the key difference from 0/1 Knapsack.
Final Answer:
In Unbounded Knapsack, items can be chosen multiple times; in 0/1 Knapsack, each item can be chosen only once. -> Option A
Quick Check:
Unbounded = multiple items allowed [OK]
Hint: Remember: Unbounded means unlimited item picks [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
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.
Step 2: Correct loop condition
To include capacity W=6, loop should run i <= W, i.e., i from 0 to 6 inclusive.
Final Answer:
Loop should run i <= W, not i < W -> Option B
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
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.
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.
Final Answer:
90 -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.