Saya perlu pergi ke bank dan menarik uang. Saya perlu menarik $ 30, $ 22 untuk membayar teman sekamar saya untuk internet dan $ 8 untuk binatu. Karena tak satu pun dari ini dapat melakukan perubahan, saya perlu $ 30 saya untuk dipecah menjadi dua partisi dari dua ukuran. Itu berarti ketika teller bertanya kepada saya bagaimana saya ingin $ 30 saya, saya harus membuat permintaan. Saya bisa memberi tahu mereka bahwa saya menginginkannya dalam dua puluh, lima, dan lima. Tetapi saya ingin membuat permintaan saya sesederhana mungkin untuk menghindari keharusan mengulang sendiri. Untuk membuat permintaan saya lebih sederhana, saya bisa meminta uang tunai saya mengandung dua puluh dan setidaknya 2 karena 8 tersirat dari total, tetapi lebih baik lagi saya bisa meminta agar salah satu tagihan yang saya terima menjadi tagihan satu dolar (jika Anda tidak yakin dengan hal ini hanya mencoba menghasilkan 29 dolar tanpa menghasilkan 8).
Jadi itu semua bagus dan bagus tapi saya perlu melakukan perhitungan ini setiap kali saya pergi ke bank jadi saya pikir saya akan menulis sebuah program untuk melakukan ini (apakah Anda menulis sebuah program untuk melakukan ini untuk saya).
Program atau fungsi Anda harus mengambil daftar bilangan bulat yang mewakili semua pembayaran yang perlu saya lakukan dan satu set bilangan bulat yang mewakili denominasi tagihan yang tersedia di bank, dan Anda harus menampilkan daftar denominasi terkecil sehingga setiap cara untuk membuat total itu termasuk bahwa daftar denominasi dapat dengan bersih dibagi ke dalam daftar pembayaran.
Aturan ekstra
Anda dapat mengasumsikan bahwa daftar denominasi akan selalu berisi
1
atau Anda dapat menambahkannya sendiri ke setiap daftar.Beberapa input akan memiliki beberapa solusi minimal. Dalam kasus ini Anda dapat menampilkan salah satu.
Ini adalah kode-golf sehingga jawaban akan dinilai dalam byte dengan lebih sedikit byte lebih baik.
Uji Kasus
Payments, denominations -> requests
{22,8} {1,2,5,10,20,50} -> {1} or {2}
{2,1,2} {1,5} -> {1}
{20,10} {1,2,5,10,20,50} -> {}
{1,1,1,1} {1,2} -> {1,1,1}
{20,6} {1,4,5} -> {1}
{2,6} {1,2,7} -> {2}
{22, 11} {1, 3, 30, 50} -> {1, 3}
{44, 22} {1, 3, 30, 50} -> {1, 3, 3, 30}
{2,6} {1,2,7} -> {2}
.
(If you are not convinced of this just try to make 29 dollars without making 9)
Maksudmu tanpa membuat 8? Atau apakah saya salah paham