OCaml (option informatique) · Chapitre 13 · Application directe du cours
Rendu de monnaie optimal
Programmation dynamique · niveau 1 (application)
Énoncé
Écrire rendu_min et vérifier qu'il rend 2 sur [4; 3; 1] et 6.
Corrigé
let rendu_min pieces montant =
let infini = montant + 1 in
let m = Array.make (montant + 1) infini in
m.(0) <- 0;
for s = 1 to montant do
List.iter (fun p ->
if p <= s && m.(s - p) + 1 < m.(s) then m.(s) <- m.(s - p) + 1
) pieces
done;
if m.(montant) = infini then -1 else m.(montant)
rendu_min [4;3;1] 6 : m.(6) se calcule via m.(3) + 1 (et m.(3) = 1), soit 2. La DP trouve l'optimum , contrairement au glouton.
Exercices semblables
- Distance d'édition corrigé
- Reconstruire les pièces du rendu corrigé
- Reconstruire la sous-suite commune corrigé
- Fibonacci par table corrigé
- Nombre de façons de rendre corrigé