Menu
CoddyTech

0/1 Knapsack Problem

Kamu memiliki n barang. Barang i memiliki berat weights[i] dan nilai values[i]. Tasmu dapat membawa total berat paling banyak capacity. Setiap barang hanya tersedia satu buah, dan kamu bisa memasukkannya secara utuh ke dalam tas atau meninggalkannya. Kembalikan total nilai terbesar yang bisa kamu masukkan ke dalam tas.

Fungsi

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
berat setiap item
valuesinteger-array
nilai setiap item
capacityinteger
berat maksimum yang dapat dibawa tas
Mengembalikaninteger
nilai total terbesar dari barang-barang yang beratnya muat dalam kapasitas

Batasan

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

Contoh

Input
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Output
17
Penjelasan
Barang 0 dan 2 memiliki berat 4 + 3 = 7 dan bernilai 10 + 7 = 17. Jika barang paling berharga dikemas terlebih dahulu (berat 5, nilai 12), hanya tersisa ruang untuk barang 1, sehingga nilainya 16.
challenge icon

Pertanyaan lanjutan

Misalkan kapasitasnya bisa mencapai 10^9, sementara jumlah nilainya paling banyak 10^4. Apa yang akan kamu gunakan sebagai indeks tabel?

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

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

17