OCaml (option informatique) · Chapitre 13 · Application directe du cours
Nombre de façons de rendre
Programmation dynamique · niveau 1 (application)
Énoncé
Écrire nb_facons pieces montant : le nombre de façons (à l'ordre près) de rendre le montant.
Corrigé
let nb_facons pieces montant =
let dp = Array.make (montant + 1) 0 in
dp.(0) <- 1;
List.iter (fun p ->
for s = p to montant do
dp.(s) <- dp.(s) + dp.(s - p)
done
) pieces;
dp.(montant)
On traite les pièces l'une après l'autre (boucle externe sur pieces) pour ne compter chaque combinaison qu'une fois (et non chaque permutation). dp.(0) = 1 : une seule façon de rendre (ne rien donner).
Exercices semblables
- Distance d'édition corrigé
- Reconstruire les pièces du rendu corrigé
- Reconstruire la sous-suite commune corrigé
- Fibonacci par table corrigé
- Rendu de monnaie optimal corrigé