Step 1: Start with capacity 0, max value is 0
dp: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Why: Base case: no capacity means no items can be added
Step 2: For capacity 2, try item (2,10): dp[2] = max(dp[2], dp[0] + 10) = 10
dp: [0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0]
Why: We can add item (2,10) once to fill capacity 2
Step 3: For capacity 3, try item (3,15): dp[3] = max(dp[3], dp[0] + 15) = 15
dp: [0, 0, 10, 15, 0, 0, 0, 0, 0, 0, 0]
Why: We can add item (3,15) once to fill capacity 3
Step 4: For capacity 4, try item (2,10): dp[4] = max(dp[4], dp[2] + 10) = 20
dp: [0, 0, 10, 15, 20, 0, 0, 0, 0, 0, 0]
Why: We can add item (2,10) twice to fill capacity 4
Step 5: For capacity 5, try item (5,40): dp[5] = max(dp[5], dp[0] + 40) = 40
dp: [0, 0, 10, 15, 20, 40, 0, 0, 0, 0, 0]
Why: Adding item (5,40) once gives max value for capacity 5
Step 6: For capacity 6, try item (2,10): dp[6] = max(dp[6], dp[4] + 10) = 30; try item (3,15): dp[6] = max(30, dp[3] + 15) = 30; try item (5,40): dp[6] = max(30, dp[1] + 40) = 40
dp: [0, 0, 10, 15, 20, 40, 40, 0, 0, 0, 0]
Why: Best value for capacity 6 is 40 by adding item (5,40) (capacity 1 unused)
Step 7: For capacity 7, try item (2,10): dp[7] = max(dp[7], dp[5] + 10) = 50; try item (3,15): dp[7] = max(50, dp[4] + 15) = 50; try item (5,40): dp[7] = max(50, dp[2] + 40) = 50
dp: [0, 0, 10, 15, 20, 40, 40, 50, 0, 0, 0]
Why: Best value for capacity 7 is 50 by adding item (5,40) plus item (2,10)
Step 8: For capacity 8, try item (2,10): dp[8] = max(dp[8], dp[6] + 10) = 50; try item (3,15): dp[8] = max(50, dp[5] + 15) = 55; try item (5,40): dp[8] = max(55, dp[3] + 40) = 55
dp: [0, 0, 10, 15, 20, 40, 40, 50, 55, 0, 0]
Why: Best value for capacity 8 is 55 by adding item (3,15) plus item (5,40)
Step 9: For capacity 9, try item (2,10): dp[9] = max(dp[9], dp[7] + 10) = 60; try item (3,15): dp[9] = max(60, dp[6] + 15) = 60; try item (5,40): dp[9] = max(60, dp[4] + 40) = 60
dp: [0, 0, 10, 15, 20, 40, 40, 50, 55, 60, 0]
Why: Best value for capacity 9 is 60 by adding item (2,10) plus item (5,40)
Step 10: For capacity 10, try item (2,10): dp[10] = max(dp[10], dp[8] + 10) = 65; try item (3,15): dp[10] = max(65, dp[7] + 15) = 65; try item (5,40): dp[10] = max(65, dp[5] + 40) = 80
dp: [0, 0, 10, 15, 20, 40, 40, 50, 55, 60, 80]
Why: Adding two items (5,40) gives max value 80 for capacity 10
Result: dp array: [0, 0, 10, 15, 20, 40, 40, 50, 55, 60, 80]
Maximum value for capacity 10 is 80