Проект Эйлера. Задача 31 «Суммы монет»

Условие:

В Англии валютой являются фунты стерлингов £ и пенсы p, и в обращении есть восемь монет:

1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) и £2 (200p).

£2 возможно составить следующим образом:

1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p

Сколькими разными способами можно составить £2, используя любое количество монет?

Решение:

# Порядок номинала монет не имеет значения, но номинал должен быть уникальным

def compute():
    TOTAL = 200
    ways = [1] + [0] * TOTAL
    for coin in [1, 2, 5, 10, 20, 50, 100, 200]:
        for i in range(len(ways) - coin):
	      ways[i + coin] += ways[i]
    return str(ways[-1])


if __name__ == "__main__":
    print(compute())