Adloun

Rendu de monnaie optimal

Exercice · OCaml (option informatique), chapitre 13 — Programmation dynamique

É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.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.