找零问题

185 阅读1分钟

给定总金额为A的一张纸币,现要兑换成面额分别为a1,a2,....,an的硬币,且希望所得到的硬币个数最少。

# -*- coding:utf-8 -*-
import time


def rec_mc(coin_value_list, change, known_results):
    min_coins = change
    if change in coin_value_list:
        known_results[change] = 1
        return 1
    elif known_results[change] > 0:
        return known_results[change]
    else:
        for i in [c for c in coin_value_list if c <= change]:
            num_coins = 1 + rec_mc(coin_value_list, change - i, known_results)
            if num_coins < min_coins:
                min_coins = num_coins
                known_results[change] = min_coins
    return min_coins


if __name__ == '__main__':
    memo = [0] * 64
    print(time.clock())
    print(rec_mc([1, 5, 10, 25], 63, memo))
    print(time.clock())