Мне нужно пойти в банк и снять деньги. Мне нужно снять 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? Или я неправильно понял