Menu
CoddyTech

Fractional Knapsack

Kamu memiliki n barang. Barang i bernilai values[i] dan memiliki berat weights[i]. Tasmu dapat menampung berat total paling banyak capacity, dan kamu boleh mengambil sebagian dari suatu barang: sebagian barang i dengan berat w bernilai values[i] × w / weights[i].

Tulis fungsi bernama fractionalKnapsack yang mengembalikan nilai total terbesar yang dapat dibawa tas, dibulatkan ke bawah menjadi bilangan bulat.

Fungsi

fractionalKnapsack(values: integer-array, weights: integer-array, capacity: integer) → integer
valuesinteger-array
nilai setiap item
weightsinteger-array
berat setiap item
capacityinteger
berat maksimum yang dapat ditampung tas
Mengembalikaninteger
nilai total terbesar yang muat di dalam tas, dibulatkan ke bawah

Batasan

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

Contoh

Input
values = [40, 90, 30, 50]weights = [8, 30, 5, 20]capacity = 40
Output
151
Penjelasan
Nilai tiap satuan berat barang-barang tersebut adalah 5, 3, 6, dan 2.5. Barang 2 dan 0 dimasukkan secara utuh dengan nilai 70, sehingga tersisa kapasitas 27, lalu 27 dari 30 satuan barang 1 menambah nilai 81, sehingga totalnya 151.
challenge icon

Pertanyaan lanjutan

Bisakah kamu menemukan jawabannya dalam waktu O(n), tanpa mengurutkan semua item?

Reset kode
def fractionalKnapsack(values, weights, capacity):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

151