Adloun

Problème — Découpe d'une barre (rod cutting)

Application directe du cours · niveau 3 (difficile) · NSI (terminale), chapitre 7 — La programmation dynamique

Énoncé

Problème — Découpe d'une barre (rod cutting).

On dispose d'une barre de longueur et d'un tableau prixprix[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.

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.