Menu
CoddyTech

0/1 Knapsack Problem

Du hast n Gegenstände. Gegenstand i wiegt weights[i] und ist values[i] wert. Deine Tasche kann höchstens ein Gesamtgewicht von capacity tragen. Jeder Gegenstand ist nur einmal vorhanden, und du kannst ihn entweder vollständig einpacken oder zurücklassen. Gib den größten Gesamtwert zurück, den du einpacken kannst.

Funktion

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
das Gewicht jedes Elements
valuesinteger-array
der Wert jedes Elements
capacityinteger
das maximale Gewicht, das die Tasche tragen kann
Gibt zurückinteger
der größte Gesamtwert der Gegenstände, deren Gewichte in die Kapazität passen

Einschränkungen

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

Beispiele

Eingabe
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Ausgabe
17
Erklärung
Die Gegenstände 0 und 2 wiegen 4 + 3 = 7 und sind 10 + 7 = 17 wert. Wenn du zuerst den wertvollsten Gegenstand einpackst (Gewicht 5, Wert 12), bleibt nur noch Platz für Gegenstand 1, sodass der Gesamtwert 16 beträgt.
challenge icon

Weiterführende Frage

Angenommen, die Kapazität kann 10^9 erreichen, während sich die Werte auf höchstens 10^4 summieren. Wonach würdest du die Tabelle indizieren?

Code zurücksetzen
def knapsack(weights, values, capacity):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

17