Menu
CoddyTech

0/1 Knapsack Problem

Masz n przedmiotów. Przedmiot i waży weights[i] i jest wart values[i]. Twój plecak może pomieścić łączną wagę wynoszącą najwyżej capacity. Każdy przedmiot występuje tylko raz i możesz go albo spakować w całości, albo zostawić. Zwróć największą łączną wartość, jaką możesz spakować.

Funkcja

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
waga każdego elementu
valuesinteger-array
wartość każdego elementu
capacityinteger
maksymalny ciężar, jaki może unieść torba
Zwracainteger
największa łączna wartość przedmiotów, których waga mieści się w pojemności

Ograniczenia

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

Przykłady

Wejście
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Wyjście
17
Wyjaśnienie
Przedmioty 0 i 2 ważą 4 + 3 = 7 i są warte 10 + 7 = 17. Spakowanie najpierw przedmiotu o największej wartości (waga 5, wartość 12) pozostawia miejsce tylko na przedmiot 1, co daje 16.
challenge icon

Pytanie dodatkowe

Załóżmy, że pojemność może wynosić nawet 10^9, a suma wartości nie przekracza 10^4. Według czego indeksujesz tablicę?

Zresetuj kod
def knapsack(weights, values, capacity):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

17