Itu adalah malam musim panas yang hangat ...
ketika mobil bodoh saya memutuskan untuk mogok di tengah jalan dalam perjalanan kembali dari supermarket. Saya mendorongnya ke sampingan dan memutuskan untuk berjalan pulang. Saya membuka bagasi untuk mengambil barang belanjaan dan barang-barang yang tersisa. Saat itulah saya perhatikan barang-barang tidak dikantongi secara merata. Beberapa tas memiliki barang yang lebih berat sementara yang lain memiliki beberapa barang yang lebih ringan - beberapa bahkan memiliki campuran barang-barang tersebut. Agar mudah saya bawa, saya memutuskan untuk mengelompokkan semuanya menjadi dua tas dan membuat bobot mereka sedekat mungkin satu sama lain.
Tujuan Anda
adalah untuk membantu saya mengatur kembali barang-barang menjadi dua tas belanja sedemikian rupa sehingga perbedaan antara kedua tas mendekati nol mungkin.
Secara matematis:
TINGGI KIRI TANGAN - TANGAN KANAN TINGGI. 0
Contoh
Jika saya hanya punya 2 item, Roti dan selai kacang, dan berat roti 250 gram dan selai kacang 150 gram, cara terbaik adalah membawanya secara terpisah dengan dua tangan.
W LH - W RH = W (BREAD) - W (P.BUTTER)
250 - 150 = 100
Kemungkinan lainnya adalah:
W (BREAD, P.BUTTER) - W (tangan kosong) = (250 + 150) - 0 = 400
Ini tidak lebih baik dari kasus pertama kami, jadi Anda harus memilih yang pertama.
Kode Anda harus
- mengambil input angka yang menunjukkan bobot item dalam tas belanja. Unit tidak penting, tetapi harus sama (idealnya kilogram atau gram). Input dapat dilakukan satu per satu atau sekaligus. Anda dapat membatasi jumlah total hingga 20 item, jika Anda mau.
- Format / tipe input terserah Anda untuk memilih, tetapi tidak ada yang lain yang harus ada selain bobot.
- Bahasa apa pun diperbolehkan, tetapi tetap berpegang pada perpustakaan standar.
- Output tampilan. Sekali lagi, Anda bebas memilih formatnya, tetapi jelaskan formatnya di posting Anda. yaitu, bagaimana kita bisa tahu mana yang merupakan item tangan kiri dan mana yang merupakan item tangan kanan.
Poin
- Kode terpendek menang.
Petunjuk
Dua kemungkinan algoritma yang dapat saya pikirkan adalah diferensiasi (lebih cepat) dan permutasi / kombinasi (lebih lambat). Anda dapat menggunakan ini atau algoritma lain yang melakukan pekerjaan.