Рассмотрите проблему, в которой у вас есть значение N
, и вам нужно рассчитать, сколько способов вы можете суммировать до N
долларов, используя [1,2,5,10,20,50,100]
Долларовые счета.Идиома динамического программирования для комбинаций
Рассмотрим классическое решение DP:
C = [1,2,5,10,20,50,100]
def comb(p):
if p==0:
return 1
c = 0
for x in C:
if x <= p:
c += comb(p-x)
return c
Он не принимает в силу порядок суммированных частей. Например, comb(4)
даст 5 результатов: [1,1,1,1],[2,1,1],[1,2,1],[1,1,2],[2,2]
, тогда как на самом деле есть 3 результата ([2,1,1],[1,2,1],[1,1,2]
- все одинаковые).
Что такое DP idiom для расчета этой проблемы? (неэлементные решения, такие как создание всех возможных решений и удаление дубликатов, не приветствуются)
ли есть также 2 доллара США? Если нет, то откуда взялись 2? – Jacob
@ Jacob - правильно, спасибо, я также взял 2 доллара. –