Optimiser F8 avec un tableau de programmation dynamique

This commit is contained in:
rabot
2026-10-21 11:15:43 +02:00
parent 02fcd4b443
commit 5cdf32fdae
3 changed files with 48 additions and 5 deletions
+13 -5
View File
@@ -242,12 +242,20 @@ static const int PIECES[] = {1, 2, 5, 10, 20, 50, 100, 200};
long nb_facons_rendre(int somme, int nb_pieces)
{
if (somme == 0)
return 1;
if (somme < 0 || nb_pieces == 0)
if (somme < 0)
return 0;
return nb_facons_rendre(somme - PIECES[nb_pieces - 1], nb_pieces) +
nb_facons_rendre(somme, nb_pieces - 1);
long *facons = calloc((size_t)somme + 1, sizeof(*facons));
if (facons == NULL) {
perror("Allocation du tableau de rendu de monnaie");
exit(EXIT_FAILURE);
}
facons[0] = 1;
for (int p = 0; p < nb_pieces; p++)
for (int s = PIECES[p]; s <= somme; s++)
facons[s] += facons[s - PIECES[p]];
long resultat = facons[somme];
free(facons);
return resultat;
}
/* F9 : catégorie d'une transaction (pour les statistiques) */