Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024
Problem description
Nadszedł czas, by powiedzieć sobie jasno o czym jest zadanie, bez żadnych historyjek i tym podobnych “bajerów”.
Dany jest zbiór monet o określonych nominałach. Chcemy wydać zadaną kwotę K za pomocą najmniejszej liczby nominałów. Należy wyznaczyć optymalny sposób wydania reszty (za pomocą najmniejszej liczby nominałów). Każdej monety wolno użyć co najwyżej raz.
Napisz program, który: wczyta liczbę nominałów oraz te nominały, wyznaczy minimalną liczbę monet, niezbędnych do wydania kwoty K, wypisze wynik na standardowe wyjście.
Wejście
W pierwszym wierszu wejścia znajdują się dwie liczby naturalne N i K, oddzielone pojedynczym odstępem i określające kolejno: liczbę nominałów oraz kwotę do wydania. W drugim (i ostatnim) wierszu wejścia znajduje się ciąg N dodatnich liczb całkowitych Ai, pooddzielanych pojedynczymi odstępami. Są to nominały monet, których można użyć do wydania kwoty K.
Wyjście
W pierwszym i jedynym wierszu wyjścia powinna się znaleźć jedna liczba całkowita – minimalna liczba nominałów niezbędna do wydania kwoty K.
Jeśli wydanie kwoty jest niemożliwe zamiast tego należy wypisać
NIE
.
Ograniczenia
1 ≤ N ≤ 40, 0 ≤ K ≤ 1018, 0 ≤ Ai ≤ 1017.
W testach wartych łącznie 15% maksymalnej punktacji: K ≤ 50 000.
W testach wartych łącznie 50% maksymalnej punktacji: N ≤ 20.
Przykład
Wejście | Wyjście | Wyjaśnienie |
|
|
8 = 5 + 2 + 1 |
Wejście | Wyjście | |
|
|