Coin changing algorithm

后端 未结 2 1164
执笔经年
执笔经年 2020-12-05 06:21

Suppose I have a set of coins having denominations a1, a2, ... ak.

One of them is known to be equal to 1.

I want to make change for all integers 1 to n using

2条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-05 06:52

    Here's a sample implementation of a dynamic programming algorithm in Python. It is simpler than the algorithm that Jason describes, because it only calculates 1 row of the 2D table he describes.

    Please note that using this code to cheat on homework will make Zombie Dijkstra cry.

    import sys
    def get_best_coins(coins, target):
        costs = [0]
        coins_used = [None]
        for i in range(1,target + 1):
            if i % 1000 == 0:
                print '...', 
            bestCost = sys.maxint
            bestCoin = -1
            for coin in coins:
                if coin <= i:
                    cost = 1 + costs[i - coin]
                    if cost < bestCost:
                        bestCost = cost
                        bestCoin = coin
            costs.append(bestCost)
            coins_used.append(bestCoin)
        ret = []    
        while target > 0:
            ret.append(coins_used[target])
            target -= coins_used[target]
        return ret
    
    coins = [1,10,25]
    target = 100033
    print get_best_coins(coins, target)
    

提交回复
热议问题