J'essaie de comprendre le DP derrière le problème du changement de monnaie, où l'on est censé compter le nombre de façons dont vous pouvez donner le changement pour une dénomination étant donné un ensemble de pièces de monnaie. Chaque pièce est présente un nombre infini de fois.Algorithme: Changement de monnaie - Compter le nombre de façons dont on peut changer
L'algorithme est tiré de la page this geeks4geeks. Les algorithmes sont les suivants (où N représente la dénomination et dp est un tableau de taille N + 1):
dp[0] = 1
for each coin c:
for i from c to N:
if i >= c:
dp[i] += dp[i-c]
Je ne suis pas en mesure de comprendre comment est le DP travailler ici et quelles sont les sous-problèmes. Editer: J'ai coché d'autres questions, mais aucune ne mentionne l'algorithme indiqué ci-dessus. Une solution de DP bidimensionnelle est abordée dans les questions précédentes.
Cet algorithme est une simplification de l'algorithme DP 2D précédent donné dans ce lien. Si vous regardez la façon dont vous faites référence à d'autres indices dans l'algorithme précédent, il devrait être facile de voir qu'il peut être simplifié de cette manière. Il ne s'agit pas tant de penser en termes de sous-problèmes que de penser en termes de simplification. – Dukeling
Eh bien, je ne suis pas capable de comprendre la simplification et c'est pourquoi j'ai demandé de l'aide. Merci! – user3667569
Fondamentalement, 'table [:]' dans le second est 'table [:] [j]' dans le premier. Le reste est le même. Ils ont changé les indices, ce qui pourrait rendre les choses confuses. Il n'est pas rare dans DP de remarquer que vous ne regardez qu'une seule ligne en arrière et que vous n'avez donc pas besoin de stocker la matrice entière, parfois vous stockez la dernière rangée et la dernière, mais vous pouvez simplement l'écraser au fur et à mesure. – Dukeling