Menu
CoddyTech

0/1 Knapsack Problem

Vous avez n articles. L’article i pèse weights[i] et vaut values[i]. Votre sac peut transporter un poids total d’au plus capacity. Chaque article existe en un seul exemplaire, et vous le prenez en entier ou le laissez de côté. Renvoyez la valeur totale maximale que vous pouvez emporter.

Fonction

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
le poids de chaque élément
valuesinteger-array
la valeur de chaque élément
capacityinteger
le poids maximal que le sac peut porter
Renvoieinteger
la valeur totale maximale des objets dont le poids ne dépasse pas la capacité

Contraintes

  • 1 ≤ n ≤ 100, où n = weights.length = values.length
  • 1 ≤ weights[i] ≤ 1000
  • 1 ≤ values[i] ≤ 104
  • 1 ≤ capacity ≤ 1000

Exemples

Entrée
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Sortie
17
Explication
Les éléments 0 et 2 pèsent 4 + 3 = 7 et valent 10 + 7 = 17. En choisissant d’abord l’élément le plus précieux (poids 5, valeur 12), il ne reste de la place que pour l’élément 1, pour une valeur totale de 16.
challenge icon

Pour aller plus loin

Supposons que la capacité puisse atteindre 10^9 tandis que la somme des valeurs est d’au plus 10^4. Quel élément utiliserais-tu comme indice du tableau ?

Réinitialiser le code
def knapsack(weights, values, capacity):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

weights = [4, 2, 3, 5]
values = [10, 4, 7, 12]
capacity = 7

Résultat attendu

17