From 39d184707a9e5b9197a8d90704816d1d26ce5aa5 Mon Sep 17 00:00:00 2001 From: kpeglo Date: Mon, 26 Oct 2026 16:52:30 +0100 Subject: [PATCH] opti8 --- banque.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/banque.c b/banque.c index b516255..3f47d83 100644 --- a/banque.c +++ b/banque.c @@ -244,18 +244,23 @@ long nb_paires_opposees(const Transaction *t, int n) return nb; } +/* F8 : nombre de façons de rendre une somme avec les pièces disponibles */ /* F8 : nombre de façons de rendre une somme avec les pièces disponibles */ static const int PIECES[] = {1, 2, 5, 10, 20, 50, 100, 200}; #define NB_PIECES 8 long nb_facons_rendre(int somme, int nb_pieces) { - if (somme == 0) - return 1; - if (somme < 0 || nb_pieces == 0) - return 0; - return nb_facons_rendre(somme - PIECES[nb_pieces - 1], nb_pieces) + - nb_facons_rendre(somme, nb_pieces - 1); + long dp[MONTANT_MONNAIE + 1] = {0}; + dp[0] = 1; + + for (int i = 0; i < nb_pieces; i++) { + for (int s = PIECES[i]; s <= somme; s++) { + dp[s] += dp[s - PIECES[i]]; + } + } + + return dp[somme]; } /* F9 : catégorie d'une transaction (pour les statistiques) */