== brute force ======================================== bruteforce on coinset=(1, 5, 10) with goal=24 number of solutions found = 9 : [24, 0, 0] [19, 1, 0] [14, 2, 0] [9, 3, 0] [4, 4, 0] [14, 0, 1] [9, 1, 1] [4, 2, 1] [4, 0, 2] fewest coins is 6 : [4, 0, 2] == greedy search ======================================== greedy debug: coinset=(1, 5, 10), goal=24, change=None greedy debug: coinset=(1, 5, 10), goal=24, change=[0, 0, 1] greedy debug: coinset=(1, 5, 10), goal=24, change=[0, 0, 2] greedy debug: coinset=(1, 5, 10), goal=24, change=[1, 0, 2] greedy debug: coinset=(1, 5, 10), goal=24, change=[2, 0, 2] greedy debug: coinset=(1, 5, 10), goal=24, change=[3, 0, 2] greedy debug: coinset=(1, 5, 10), goal=24, change=[4, 0, 2] greedy coinset=(1, 5, 10), goal=24 finds 6 coins : [4, 0, 2] == dynamic programming ======================================== dynamic : coinset=(1, 5, 10), goal=1, change=[1, 0, 0]) dynamic : coinset=(1, 5, 10), goal=2, change=[2, 0, 0]) dynamic : coinset=(1, 5, 10), goal=3, change=[3, 0, 0]) dynamic : coinset=(1, 5, 10), goal=4, change=[4, 0, 0]) dynamic : coinset=(1, 5, 10), goal=5, change=[0, 1, 0]) dynamic : coinset=(1, 5, 10), goal=6, change=[1, 1, 0]) dynamic : coinset=(1, 5, 10), goal=7, change=[2, 1, 0]) dynamic : coinset=(1, 5, 10), goal=8, change=[3, 1, 0]) dynamic : coinset=(1, 5, 10), goal=9, change=[4, 1, 0]) dynamic : coinset=(1, 5, 10), goal=10, change=[0, 0, 1]) dynamic : coinset=(1, 5, 10), goal=11, change=[1, 0, 1]) dynamic : coinset=(1, 5, 10), goal=12, change=[2, 0, 1]) dynamic : coinset=(1, 5, 10), goal=13, change=[3, 0, 1]) dynamic : coinset=(1, 5, 10), goal=14, change=[4, 0, 1]) dynamic : coinset=(1, 5, 10), goal=15, change=[0, 1, 1]) dynamic : coinset=(1, 5, 10), goal=16, change=[1, 1, 1]) dynamic : coinset=(1, 5, 10), goal=17, change=[2, 1, 1]) dynamic : coinset=(1, 5, 10), goal=18, change=[3, 1, 1]) dynamic : coinset=(1, 5, 10), goal=19, change=[4, 1, 1]) dynamic : coinset=(1, 5, 10), goal=20, change=[0, 0, 2]) dynamic : coinset=(1, 5, 10), goal=21, change=[1, 0, 2]) dynamic : coinset=(1, 5, 10), goal=22, change=[2, 0, 2]) dynamic : coinset=(1, 5, 10), goal=23, change=[3, 0, 2]) dynamic : coinset=(1, 5, 10), goal=24, change=[4, 0, 2]) == brute force ======================================== bruteforce on coinset=(1, 6, 10) with goal=24 number of solutions found = 9 : [24, 0, 0] [18, 1, 0] [12, 2, 0] [6, 3, 0] [0, 4, 0] [14, 0, 1] [8, 1, 1] [2, 2, 1] [4, 0, 2] fewest coins is 4 : [0, 4, 0] == greedy search ======================================== greedy debug: coinset=(1, 6, 10), goal=24, change=None greedy debug: coinset=(1, 6, 10), goal=24, change=[0, 0, 1] greedy debug: coinset=(1, 6, 10), goal=24, change=[0, 0, 2] greedy debug: coinset=(1, 6, 10), goal=24, change=[1, 0, 2] greedy debug: coinset=(1, 6, 10), goal=24, change=[2, 0, 2] greedy debug: coinset=(1, 6, 10), goal=24, change=[3, 0, 2] greedy debug: coinset=(1, 6, 10), goal=24, change=[4, 0, 2] greedy coinset=(1, 6, 10), goal=24 finds 6 coins : [4, 0, 2] == dynamic programming ======================================== dynamic : coinset=(1, 6, 10), goal=1, change=[1, 0, 0]) dynamic : coinset=(1, 6, 10), goal=2, change=[2, 0, 0]) dynamic : coinset=(1, 6, 10), goal=3, change=[3, 0, 0]) dynamic : coinset=(1, 6, 10), goal=4, change=[4, 0, 0]) dynamic : coinset=(1, 6, 10), goal=5, change=[5, 0, 0]) dynamic : coinset=(1, 6, 10), goal=6, change=[0, 1, 0]) dynamic : coinset=(1, 6, 10), goal=7, change=[1, 1, 0]) dynamic : coinset=(1, 6, 10), goal=8, change=[2, 1, 0]) dynamic : coinset=(1, 6, 10), goal=9, change=[3, 1, 0]) dynamic : coinset=(1, 6, 10), goal=10, change=[0, 0, 1]) dynamic : coinset=(1, 6, 10), goal=11, change=[1, 0, 1]) dynamic : coinset=(1, 6, 10), goal=12, change=[0, 2, 0]) dynamic : coinset=(1, 6, 10), goal=13, change=[1, 2, 0]) dynamic : coinset=(1, 6, 10), goal=14, change=[2, 2, 0]) dynamic : coinset=(1, 6, 10), goal=15, change=[3, 2, 0]) dynamic : coinset=(1, 6, 10), goal=16, change=[0, 1, 1]) dynamic : coinset=(1, 6, 10), goal=17, change=[1, 1, 1]) dynamic : coinset=(1, 6, 10), goal=18, change=[0, 3, 0]) dynamic : coinset=(1, 6, 10), goal=19, change=[1, 3, 0]) dynamic : coinset=(1, 6, 10), goal=20, change=[0, 0, 2]) dynamic : coinset=(1, 6, 10), goal=21, change=[1, 0, 2]) dynamic : coinset=(1, 6, 10), goal=22, change=[0, 2, 1]) dynamic : coinset=(1, 6, 10), goal=23, change=[1, 2, 1]) dynamic : coinset=(1, 6, 10), goal=24, change=[0, 4, 0])