Menu
CoddyTech

Fractional Knapsack

n öğen var. i öğesinin değeri values[i] ve ağırlığı weights[i] kadardır. Çantan toplamda en fazla capacity ağırlık taşıyabilir ve bir öğenin herhangi bir kısmını alabilirsin: ağırlığı w olan i öğesinin bir parçasının değeri values[i] × w / weights[i] kadardır.

Çantanın taşıyabileceği en yüksek toplam değeri en yakın alt tam sayıya yuvarlayarak döndüren fractionalKnapsack adlı bir fonksiyon yaz.

Fonksiyon

fractionalKnapsack(values: integer-array, weights: integer-array, capacity: integer) → integer
valuesinteger-array
her bir öğenin değeri
weightsinteger-array
her bir öğenin ağırlığı
capacityinteger
çantanın taşıyabileceği en fazla ağırlık
Döndürürinteger
çantaya sığan en yüksek toplam değer, aşağı yuvarlanmış

Kısıtlar

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

Örnekler

Girdi
values = [40, 90, 30, 50]weights = [8, 30, 5, 20]capacity = 40
Çıktı
151
Açıklama
Ağırlık birimi başına eşyaların değerleri 5, 3, 6 ve 2.5'tir. 2 ve 0 numaralı eşyalar tamamen alınarak 70 değer elde edilir ve 27 kapasite kalır; 1 numaralı eşyanın 30 biriminden 27'si de 81 değer ekleyerek toplamı 151 yapar.
challenge icon

Ek soru

Tüm öğeleri sıralamadan, cevabı O(n) zamanda bulabilir misin?

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

Test #1

Test #2

Test #3

Argümanlar

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

Beklenen Çıktı

151