Muszę iść do banku i wypłacić trochę pieniędzy. Muszę wypłacić 30 USD, 22 USD, aby zapłacić współlokatorowi za Internet i 8 USD za pranie. Ponieważ żadna z nich nie może zmienić, potrzebuję 30 USD na podzielenie na dwie partie dwóch rozmiarów. Oznacza to, że kiedy kasjer zapyta mnie, jak chcę moje 30 USD, będę musiał złożyć wniosek. Mogę im powiedzieć, że chcę za dwadzieścia, piątkę i pięć. Ale chcę, aby moja prośba była jak najprostsza, aby uniknąć konieczności powtarzania się. Aby uprościć moją prośbę, mógłbym poprosić o to, aby moja gotówka zawierała dwadzieścia i co najmniej 2, ponieważ 8 wynika z sumy, ale jeszcze lepiej mogę po prostu poprosić, aby jeden z rachunków, który otrzymam, był rachunkiem za jeden dolar (jeśli nie są do tego przekonani, po prostu spróbuj zarobić 29 dolarów bez zarabiania 8).
Więc to wszystko w porządku i elegancko, ale muszę przeprowadzać te obliczenia za każdym razem, gdy idę do banku, więc pomyślałem, że napiszę program, który to zrobi (czy napiszesz program, który to dla mnie zrobi).
Twój program lub funkcja powinna wziąć listę liczb całkowitych reprezentujących wszystkie płatności, które muszę dokonać, oraz zestaw liczb całkowitych reprezentujących nominały rachunków dostępnych w banku, i musisz podać najmniejszą listę nominałów, tak aby każdy sposób na sumę obejmuje to, że listę nominałów można jednoznacznie podzielić na listę płatności.
Dodatkowe zasady
Możesz założyć, że lista nominałów zawsze będzie zawierać a
1
lub możesz dodać ją do każdej listy samodzielnie.Niektóre dane wejściowe będą miały wiele minimalnych rozwiązań. W takich przypadkach możesz wypisać jedno z nich.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
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)
Masz na myśli bez robienia 8? I nie rozumieją lub nie