| 1 | Initialize dp | - | - | [0, 999, 999, 999, 999, 999, 999] | dp[0] = 0, others set to large number (999) |
| 2 | Check amount | 1 | 1 | [0, 1, 999, 999, 999, 999, 999] | dp[1] = min(999, dp[0]+1)=1 |
| 3 | Check amount | 2 | 1 | [0, 1, 2, 999, 999, 999, 999] | dp[2] = min(999, dp[1]+1)=2 |
| 4 | Check amount | 3 | 1 | [0, 1, 2, 3, 999, 999, 999] | dp[3] = min(999, dp[2]+1)=3 |
| 5 | Check amount | 3 | 3 | [0, 1, 2, 1, 999, 999, 999] | dp[3] = min(3, dp[0]+1)=1 (using coin 3) |
| 6 | Check amount | 4 | 1 | [0, 1, 2, 1, 2, 999, 999] | dp[4] = min(999, dp[3]+1)=2 |
| 7 | Check amount | 4 | 3 | [0, 1, 2, 1, 2, 999, 999] | dp[4] = min(2, dp[1]+1)=2 (no change) |
| 8 | Check amount | 4 | 4 | [0, 1, 2, 1, 1, 999, 999] | dp[4] = min(2, dp[0]+1)=1 (using coin 4) |
| 9 | Check amount | 5 | 1 | [0, 1, 2, 1, 1, 2, 999] | dp[5] = min(999, dp[4]+1)=2 |
| 10 | Check amount | 5 | 3 | [0, 1, 2, 1, 1, 2, 999] | dp[5] = min(2, dp[2]+1)=2 (no change) |
| 11 | Check amount | 5 | 4 | [0, 1, 2, 1, 1, 2, 999] | dp[5] = min(2, dp[1]+1)=2 (no change) |
| 12 | Check amount | 6 | 1 | [0, 1, 2, 1, 1, 2, 3] | dp[6] = min(999, dp[5]+1)=3 |
| 13 | Check amount | 6 | 3 | [0, 1, 2, 1, 1, 2, 2] | dp[6] = min(3, dp[3]+1)=2 (using coin 3) |
| 14 | Check amount | 6 | 4 | [0, 1, 2, 1, 1, 2, 2] | dp[6] = min(2, dp[2]+1)=2 (no change) |
| 15 | Result | 6 | - | [0, 1, 2, 1, 1, 2, 2] | Minimum coins for 6 is 2 |
| 16 | End | - | - | - | dp[6] found, algorithm stops |