Kode Nugget
Ini adalah situasi hipotetis di mana hari Jumat malam, dan Anda telah mengundang teman bermain golf yang biasa untuk berpartisipasi dalam hobi favorit Anda: golf kode. Namun, karena ini adalah tugas yang menguras otak, Anda perlu mengambil beberapa makanan otak untuk grup sehingga Anda dapat bermain golf sebanyak mungkin dari kode Anda.
Sekarang, camilan favorit semua orang adalah chicken nugget, tetapi ada masalah: Tidak ada satu pun dari mereka yang memenuhi kebutuhan semua orang. Jadi, karena Anda sudah berada dalam suasana golf, Anda memutuskan untuk membuat program yang menentukan paket apa yang harus Anda beli untuk dapat memenuhi kebutuhan Nugget semua orang.
Ukuran paket nugget ayam ada di semua tempat, dan tergantung di mana Anda tinggal di dunia, ukuran standar juga berubah. Namun, [tempat terdekat yang menyediakan nugget] terdekat menyediakan paket nugget ukuran berikut:
4, 6, 9, 10, 20, 40
Sekarang Anda mungkin memperhatikan bahwa Anda tidak dapat memesan kombinasi nugget tertentu. Misalnya, 11nugget tidak dimungkinkan, karena tidak ada kombinasi yang sama 11persis. Namun, Anda dapat membuatnya 43dengan mendapatkan 1 bungkus 20, 1 bungkus 10, 1 bungkus 9dan 1 bungkus 4,
20 + 10 + 9 + 4 = 43 (597)
di mana 597setiap istilah kuadrat dan ditambahkan bersama-sama (petunjuk: solusi optimal memiliki ini sebagai nilai tertinggi) . Tentu saja ada cara lain untuk membuatnya 43, tetapi seperti yang Anda tahu, semakin banyak nugget per bungkus, semakin murah nugget per paket. Jadi, Anda ingin membeli secara ideal jumlah paket paling sedikit dan dalam jumlah terbesar untuk meminimalkan biaya Anda.
Tugas
Anda harus membuat program atau fungsi yang mengambil daftar bilangan bulat yang sesuai dengan kebutuhan setiap orang. Anda kemudian harus menghitung dan mencetak pesanan α paling efisien untuk membeli nugget ayam. Urutan α yang paling hemat biaya adalah kombinasi dimana jumlah kuadrat dari setiap kuantitas adalah yang tertinggi. Jika sama sekali tidak ada cara untuk membeli nugget dengan sempurna, Anda harus mencetak nilai palsu seperti0 , False, Impossible!, atau apa pun yang tersedia dalam bahasa Anda.
Contoh I / O:
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
Sini adalah daftar solusi ideal untuk 400 yang pertama. Perhatikan ini tidak diformat seperti yang saya harapkan dari Anda, masing tuple- masing ada dalam formulir (N lots of M).
Aturan
- Tidak ada celah standar.
- Tidak menggunakan fungsi bawaan yang melakukan semua atau sebagian besar tugas, seperti
FrobeniusSolvedi Mathematica.
α - Untuk mengklarifikasi ini dengan sebuah contoh, Anda juga dapat membuat 43 dengan melakukan 4 + 6 + 6 + 9 + 9 + 9 = 43 (319), tetapi ini tidak akan optimal, dan dengan demikian output yang salah, karena jumlah kuadrat kurang dari kombinasi yang saya catat dalam pendahuluan. Pada dasarnya, jumlah kuadrat yang lebih tinggi = biaya lebih rendah = paling hemat biaya.