Step 1: Initialize dp array with dp[0] = 0 and others as infinity (unknown)
dp: [0, ∞, ∞, ∞, ∞, ∞, ∞]
Why: 0 coins needed to make amount 0; others unknown yet
Step 2: Calculate dp[1]: try coin 1 -> dp[1] = dp[0] + 1 = 1
dp: [0, 1, ∞, ∞, ∞, ∞, ∞]
Why: Only coin 1 fits amount 1, so 1 coin needed
Step 3: Calculate dp[2]: try coin 1 -> dp[2] = dp[1] + 1 = 2
dp: [0, 1, 2, ∞, ∞, ∞, ∞]
Why: Only coin 1 fits amount 2, so 2 coins needed
Step 4: Calculate dp[3]: try coin 1 -> dp[3] = dp[2] + 1 = 3; try coin 3 -> dp[3] = dp[0] + 1 = 1 (better)
dp: [0, 1, 2, 1, ∞, ∞, ∞]
Why: Using coin 3 alone is better than three 1 coins
Step 5: Calculate dp[4]: try coin 1 -> dp[4] = dp[3] + 1 = 2; try coin 3 -> dp[4] = dp[1] + 1 = 2; try coin 4 -> dp[4] = dp[0] + 1 = 1 (best)
dp: [0, 1, 2, 1, 1, ∞, ∞]
Why: Coin 4 alone is best for amount 4
Step 6: Calculate dp[5]: try coin 1 -> dp[5] = dp[4] + 1 = 2; try coin 3 -> dp[5] = dp[2] + 1 = 3; try coin 4 -> dp[5] = dp[1] + 1 = 2
dp: [0, 1, 2, 1, 1, 2, ∞]
Why: Minimum coins for 5 is 2 (e.g., 1+4)
Step 7: Calculate dp[6]: try coin 1 -> dp[6] = dp[5] + 1 = 3; try coin 3 -> dp[6] = dp[3] + 1 = 2 (better); try coin 4 -> dp[6] = dp[2] + 1 = 3
dp: [0, 1, 2, 1, 1, 2, 2]
Why: Using coin 3 twice is best for amount 6
Result: dp: [0, 1, 2, 1, 1, 2, 2]
Minimum coins needed: 2