Напишите программу, в которой сумма N для внесения изменений и количество типов бесконечно доступных монет и список из m монет выписывают, сколько разных способов вы можете внести изменения с монет в STDOUT.Почему это решение не работает для алгоритма замены монет?
Моя интуиция была для каждой монеты, чтобы попробовать эту монету, и пересчитать на n - c, где c - значение монеты, возвращая 1, если я дойду до нуля и 0, если я получу ниже нуля. Я проходил мимо ранее использованной монеты и только возвращался к монетам, меньшим или равным предыдущей монете, для предотвращения дублирования. Я смущен, почему этот подход неверен и как я могу его исправить.
Вот мой код:
def calc_change(n, coins):
cache = {}
c = max(coins)
nums = calc_ways(n, coins, cache, c)
return nums
def calc_ways(n, coins, cache, current_coin):
if n < 0:
return 0
if n == 0:
return 1
if n not in cache:
cache[n] = sum(calc_ways(n - c, coins, cache, c) for c in coins if c <= current_coin)
return cache[n]
answer = calc_change(n, coins)
print answer
Спасибо за любую помощь.
Это похоже на работу. Почему вы думаете, что не делает? – Pablo
Я запускаю его на hackerrank и получаю неправильный результат – Jared
Я думаю, ваша проблема в том, что 'cache' хранит, сколько возможных комбинаций существует для' n', но не учитывает 'current_coin'. – Pablo