Search code examples
dynamic-programmingcoin-change

Change-making: Dynamic Programming


In a lecture earlier, we were told that using a greedy approach to solve a change making problem would not always work.

An example of this was given as follows:

We want to reach n = 14, and we have three coins of different values: d1 = 1,d2 = 7,d3 = 10.

Using the greedy approach this would lead us to do 10 + 1 + 1 + 1 + 1 (5 coins).

It was said the a dynamic problem approach would solve this accurately. I tried working it out but it came back to 5.

Assume F holds the number of coins needed to make an amount

F[14] = min {F[14 – 1] , F[14 – 7],  F[14 – 10]} + 1

      = F[14 – 10] + 1 = 4 + 1 = 5

This shows again that we need 5 coins, when this can clearly be done by using 2 coins (7 + 7).

What gives? Thanks.


Solution

  • You assumed that min {F[14 – 1] , F[14 – 7], F[14 – 10]}=F[14-10] when it is not the case. The minimum is actually F[14-7]=1 and hence the optimum is 2