+ - masalah ransel

9

Dengan serangkaian item, masing-masing dengan bobot dan nilai, tentukan jumlah masing-masing item yang akan dimasukkan ke dalam koleksi sehingga total berat kurang dari atau sama dengan batas yang diberikan dan nilai total adalah sebesar mungkin.

Wikipedia untuk informasi lebih lanjut

Misalnya Anda dapat diberi bobot maksimal 15 dan objek dengan nilai / massa sebagai [5,2], [7,4] [1,1]dan Anda akan menghasilkan [7,0,1]7 [5 <value>, 2 <mass>]objek dan 1 [1 <value>, 1 <mass>]objek dengan skor 36.

Aturan

Masukan dapat diambil dalam format apa pun yang masuk akal

Output juga format yang fleksibel,

Anda tidak boleh menggunakan perpustakaan yang tidak standar. Jika Anda harus menginstal atau mengunduh pustaka apa saja untuk menggunakannya secara terpisah dari pengaturan awal maka itu tidak diperbolehkan

Objek mungkin memiliki massa dan nilai negatif (yaitu -1, -1)

Diperlukan jawaban optimal

Kemenangan

Kode terpendek menang

Massa dan nilai negatif?

Ini adalah bagian penting dari tantangan ini. Katakanlah Anda memiliki objek dengan item (massa, nilai) seperti [4,3],[-1,-1]dan tas dengan kapasitas 15. Anda dapat menempatkan 3 dari yang pertama dan skor 9 atau menempatkan 4 dari yang pertama dan salah satu dari -1, -1 objek untuk skor 11.

Christopher
sumber
sandbox
Christopher
Bisakah kita berasumsi bahwa tidak ada objek yang memiliki massa non-positif?
HyperNeutrino
@HyperNeutrino menghapus sebentar untuk edit
Christopher
2
Bisakah kita menganggap semuanya bilangan bulat? Juga, apakah kita harus berurusan dengan kasus-kasus seperti [[2, 1], [-1, -1]] di mana total nilai dapat dibuat besar secara sewenang-wenang?
5
Judul itu menyesatkan. Karena bobot negatif ini bukan masalah ransel tetapi variasi pada masalah pemrograman linier.
ngn

Jawaban:

2

Pyth, 18 byte

h.MshMZfghQseMTy*F

Output sebagai daftar pasangan [nilai, berat]. Horrendously tidak efisien, tetapi adalah NP-lengkap.
Coba di sini

Penjelasan

h.MshMZfghQseMTy*F
               y*FQ  Get all sets with up to <capacity> of each item.
       fghQseMT      Choose the sets whose total weight fits in the bag.
 .MshMZ              Choose those with the highest value.
h                    Take the first.

sumber