NSI (terminale) · Chapitre 7 · Application directe du cours
Problème — Découpe d'une barre (rod cutting)
La programmation dynamique · niveau 3 (difficile)
Énoncé
Problème — Découpe d'une barre (rod cutting).
On dispose d'une barre de longueur et d'un tableau prix où prix[i] donne le prix d'un morceau de longueur . Déterminer le revenu maximal obtenu en découpant la barre en morceaux entiers.
Corrigé
Soit le revenu maximal pour une barre de longueur . On a , avec .
def decoupe_barre(prix, n):
# prix indexe de 1 a n ; on suppose prix[0] = 0
R = [0] * (n + 1)
for longueur in range(1, n + 1):
meilleur = float('-inf')
for i in range(1, longueur + 1):
meilleur = max(meilleur, prix[i] + R[longueur - i])
R[longueur] = meilleur
return R[n]
La complexité est . Ce problème illustre parfaitement la sous-structure optimale : la meilleure découpe d'une barre se déduit des meilleures découpes des morceaux plus courts.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 7 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.