Мені потрібно піти в банк і зняти трохи грошей. Мені потрібно зняти 30, 22 долари, щоб заплатити моєму сусіду по кімнаті за Інтернет та 8 доларів за прання. Оскільки жодне з них не може змінити, мені потрібно 30 доларів США, щоб вони були розділені на дві секції двох розмірів. Це означає, що, коли теллер запитує мене, як я хочу, щоб я отримав 30 доларів, мені доведеться зробити запит. Я міг би сказати їм, що хочу цього в двадцять, п'ятьох і п'ятьох. Але я хочу зробити свій запит якомога простішим, щоб уникнути повторення. Щоб спростити запит, я міг би попросити, щоб мої готівки містили двадцять і принаймні 2 гроші, оскільки 8 мається на увазі під загальною сумою, але ще краще, але я міг би просто попросити, щоб одна з купюр, які я отримував, була однодоларовою купюрою (якщо ви не переконані в цьому, просто спробуйте заробити 29 доларів, не роблячи 8).
Отож, це все нормально і безглуздо, але мені потрібно робити цей розрахунок щоразу, коли я йду до банку, щоб я подумав, що я напишу програму для цього (чи ти пишеш програму, щоб це зробити для мене).
Ваша програма або функція повинна містити список цілих чисел, що представляють усі платежі, які мені потрібно здійснити, і набір цілих чисел, що представляють номінали векселів, наявних у банку, і ви повинні вивести найменший список номіналів таким чином, щоб усі способи зробити загальну суму що включає, що список номіналів може бути чітко розділений на перелік платежів.
Додаткові правила
Ви можете припустити, що список деномінацій завжди буде містити
1
або ви можете додавати його до кожного списку самостійно.Деякі входи матимуть декілька мінімальних рішень. У цих випадках ви можете вивести будь-який.
Це код-гольф, тому відповіді будуть набиратись у байтах, а менша кількість байтів - краща.
Випробування
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)
Ви маєте на увазі, не роблячи 8? Або я неправильно зрозумів