Ceci est un problème de programmation dynamique classique (noter tout d'abord que l'algorithme glouton ne fonctionne pas toujours ici!).
Supposons que les pièces sont commandées de sorte que a_1 > a_2 > ... > a_k = 1
. Nous définissons un nouveau problème. Nous disons que le problème (i, j)
est de trouver le nombre minimum de pièces faisant changement pour j
en utilisant des pièces de monnaie a_i > a_(i + 1) > ... > a_k
. Le problème que nous souhaitons résoudre est (1, j)
pour tout j
avec 1 <= j <= n
. Dites que C(i, j)
est la réponse au problème (i, j)
.
Maintenant, considérons une instance (i, j)
. Nous devons décider si nous utilisons ou non l'une des pièces a_i
. Si ce n'est pas le cas, nous sommes en train de résoudre un problème (i + 1, j)
et la réponse est C(i + 1, j)
. Si nous sommes, nous complétons la solution en faisant le changement pour j - a_i
. Pour ce faire en utilisant le moins de pièces possible, nous voulons résoudre le problème (i, j - a_i)
. Nous organisons des choses pour que ces deux problèmes sont déjà résolus pour nous et puis:
C(i, j) = C(i + 1, j) if a_i > j
= min(C(i + 1, j), 1 + C(i, j - a_i)) if a_i <= j
maintenant savoir ce que les premiers cas sont et comment traduire cela dans la langue de votre choix et vous devriez être bon d'aller.
Si vous souhaitez vous essayer à un autre problème intéressant nécessitant une programmation dynamique, consultez Projet Euler Problem 67.
Aider un gars à résoudre un problème de devoirs ne va pas soudainement en faire un étudiant A +. Dans certains cas, cela pourrait aider l'étudiant à «voir la lumière» et à devenir un jeune développeur prometteur. Quelqu'un qui répète le comportement cependant (ne pas essayer de résoudre les problèmes par ses propres moyens) est plus susceptible d'être simplement quelqu'un qui ne grandit jamais parce qu'ils ne se mettent pas au défi eux-mêmes. Ils vont s'écraser et brûler misérablement à un moment donné, le jour de l'examen le plus probable. Au moins, là où je suis allé à l'école, les examens étaient si importants que les devoirs étaient effectivement hors de propos (dans un cours, les examens étaient de 100%). – jason