Ich muss zur Bank gehen und etwas Geld abheben. Ich muss 30 $, 22 $ abheben, um meinen Mitbewohner für das Internet und 8 $ für die Wäsche zu bezahlen. Da sich an beiden nichts ändern kann, muss ich meine 30 US-Dollar in zwei Partitionen der beiden Größen aufteilen. Das heißt, wenn der Kassierer mich fragt, wie ich meine 30 Dollar haben möchte, muss ich eine Anfrage stellen. Ich könnte ihnen sagen, dass ich es in zwanzig, fünf und fünf haben will. Aber ich möchte meine Anfrage so einfach wie möglich machen, damit ich mich nicht wiederholen muss. Um meine Anfrage zu vereinfachen, könnte ich verlangen, dass mein Bargeld zwanzig und mindestens zwei enthält, da die 8 durch die Summe impliziert wird, aber noch besser, ich könnte einfach verlangen, dass eine der Rechnungen, die ich erhalte, eine Ein-Dollar-Rechnung ist (Wenn Sie Ich bin nicht davon überzeugt, versuche einfach 29 Dollar zu verdienen, ohne 8).
Das ist alles in Ordnung, aber ich muss diese Berechnung jedes Mal durchführen, wenn ich zur Bank gehe. Deshalb dachte ich, ich würde ein Programm schreiben, um dies zu tun.
Ihr Programm oder Ihre Funktion sollte eine Liste von ganzen Zahlen enthalten, die alle Zahlungen darstellen, die ich leisten muss, und eine Reihe von ganzen Zahlen, die die Nennwerte der bei der Bank verfügbaren Banknoten darstellen, und Sie müssen die kleinste Liste von Nennwerten so ausgeben, dass auf jede Weise die Summe gebildet wird Das schließt ein, dass die Liste der Stückelungen sauber in die Liste der Zahlungen unterteilt werden kann.
Extra Regeln
Sie können davon ausgehen, dass die Nennwertliste immer a enthält,
1
oder Sie können sie jeder Liste selbst hinzufügen.Einige Eingaben haben mehrere minimale Lösungen. In diesen Fällen können Sie beide ausgeben.
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
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)
Du meinst ohne 8 zu machen? Oder habe ich falsch verstanden