Adloun

Nombre de façons de rendre

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

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

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.