Adloun

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

Le cours du chapitre · Tous les exercices du chapitre