Menu
CoddyTech

0/1 Knapsack Problem

n öğeniz var. i. öğenin ağırlığı weights[i] ve değeri values[i] kadardır. Çantanız en fazla toplam capacity ağırlık taşıyabilir. Her öğeden yalnızca bir tane vardır ve öğeyi ya tamamen çantanıza koyarsınız ya da geride bırakırsınız. Çantanıza koyabileceğiniz en yüksek toplam değeri döndürün.

Fonksiyon

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
her bir öğenin ağırlığı
valuesinteger-array
her bir öğenin değeri
capacityinteger
çantanın taşıyabileceği en fazla ağırlık
Döndürürinteger
kapasiteye sığan ağırlıklardaki öğelerin toplam değerinin en büyüğü

Kısıtlar

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

Örnekler

Girdi
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Çıktı
17
Açıklama
0 ve 2 numaralı öğelerin ağırlıkları 4 + 3 = 7, değerleri ise 10 + 7 = 17'dir. Önce en değerli öğeyi (ağırlık 5, değer 12) çantaya koymak, yalnızca 1 numaralı öğeye yetecek kadar yer bırakır ve toplam değeri 16 olur.
challenge icon

Ek soru

Kapasitenin 10^9'a ulaşabildiğini, değerlerin toplamının ise en fazla 10^4 olduğunu varsayalım. Tabloyu neye göre indekslerdiniz?

Kodu sıfırla
def knapsack(weights, values, capacity):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argümanlar

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

Beklenen Çıktı

17