рекурсивная реализация «минимального количества монет» в Python

Эта проблема такая же, как вВот.

Given a list of coins, their values (c1, c2, c3, ... cj, ...), and the total sum i. Find the minimum number of coins the sum of which is i (we can use as many coins of one type as we want), or report that it's not possible to select coins in such a way that they sum up to S.

Вчера я только познакомился с динамическим программированием и попытался написать для него код.

# Optimal substructure: C[i] = 1 + min_j(C[i-cj])
cdict = {}
def C(i, coins):

    if i <= 0:
        return 0

    if i in cdict:
        return cdict[i]
    else:
        answer = 1 + min([C(i - cj, coins) for cj in coins])
        cdict[i] = answer
        return answer

Здесь C [i] является оптимальным решением для суммы денег 'i'. Доступные монеты: {c1, c2, ..., cj, ...} для программы я увеличил предел рекурсии, чтобы избежать ошибки превышения максимальной глубины рекурсии. Но эта программа дает правильный ответ только кому-то, и когда решение невозможно, это не указывает на это.

What is wrong with my code and how to correct it?

Ответы на вопрос(5)

Ваш ответ на вопрос