Menu
CoddyTech

Fractional Knapsack

Du hast n Gegenstände. Gegenstand i ist values[i] wert und wiegt weights[i]. Dein Rucksack kann insgesamt höchstens ein Gewicht von capacity tragen, und du darfst jeden Gegenstand teilweise mitnehmen: Ein Stück von Gegenstand i mit einem Gewicht von w ist values[i] × w / weights[i] wert.

Schreibe eine Funktion namens fractionalKnapsack, die den größten Gesamtwert zurückgibt, den der Rucksack tragen kann, abgerundet auf eine ganze Zahl.

Funktion

fractionalKnapsack(values: integer-array, weights: integer-array, capacity: integer) → integer
valuesinteger-array
der Wert jedes Elements
weightsinteger-array
das Gewicht jedes Gegenstands
capacityinteger
das höchste Gewicht, das der Rucksack tragen kann
Gibt zurückinteger
der größte Gesamtwert, der in den Rucksack passt, abgerundet

Einschränkungen

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

Beispiele

Eingabe
values = [40, 90, 30, 50]weights = [8, 30, 5, 20]capacity = 40
Ausgabe
151
Erklärung
Pro Gewichtseinheit sind die Gegenstände 5, 3, 6 und 2,5 wert. Die Gegenstände 2 und 0 passen vollständig hinein und ergeben 70, sodass noch Platz für 27 bleibt, und 27 der 30 Einheiten von Gegenstand 1 ergeben zusätzlich 81, also insgesamt 151.
challenge icon

Weiterführende Frage

Kannst du die Antwort in O(n) Zeit finden, ohne alle Elemente zu sortieren?

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

Test #1

Test #2

Test #3

Argumente

values = [40, 90, 30, 50]
weights = [8, 30, 5, 20]
capacity = 40

Erwartete Ausgabe

151