Mental Model
We want to find how many different ways we can make a total amount using given coin values. Each coin can be used many times.
Analogy: Imagine you have different types of Lego blocks (coins) and you want to build a tower of a certain height (amount). You want to count all the different ways to stack these blocks to reach exactly that height.
coins: [1, 2, 3] amount: 4 ways array (index = amount): [1, 0, 0, 0, 0] ↑ Initially, ways[0] = 1 means there is 1 way to make amount 0 (use no coins).
