Sari la conținut
Zece la Info
Probleme

Concurs MI UB 2021 - Cel mai mic contraexemplu pentru algoritmul lacom

Grea 1500 ms 64 MB#concurs#mateinfo-ub#2021#programare-dinamica

Consideram urmatorul algoritm lacom de acoperire a unei sume de bani, folosind bancnotele disponibile:

Cat timp suma este neacoperita si exista o bancnota de valoare mai mica sau egala cu suma ramasa, se alege cea mai mare astfel de bancnota, se scoate din portofel, si suma ramasa se reduce cu valoarea ei. Daca algoritmul se incheie cu suma 0, a reusit, altfel a esuat.

Pentru o configuratie de tipuri de bancnote disponibile (fiecare tip putand fi folosit de oricate ori), poate exista o suma S pentru care algoritmul lacom esueaza, desi exista o combinatie de bancnote care acopera exact suma S (adica exista o solutie cu mai putine bancnote decat gaseste algoritmul lacom, sau algoritmul lacom se blocheaza complet). O astfel de suma se numeste contraexemplu.

Se citesc k tipuri de bancnote (intre care se afla obligatoriu si valoarea 1) si un numar M. Fie S_min cea mai mica suma de acoperit care constituie un contraexemplu pentru algoritmul lacom, folosind exact aceste tipuri de bancnote. Determinati restul lui S_min la impartirea cu M.

Date de intrare
Pe prima linie se citesc doua numere naturale k si M. Pe a doua linie se citesc k numere naturale distincte, reprezentand valorile bancnotelor disponibile (printre care se afla intotdeauna valoarea 1).
Date de iesire
Se afiseaza un singur numar intreg, restul lui S_min la impartirea cu M.
Restrictii
2 <= k <= 10 1 <= valoare bancnota <= 1000 Valoarea 1 se afla intotdeauna printre bancnotele date. Se garanteaza ca S_min exista si este cel mult 3000.

Exemple

Exemplul 1

Intrare

3 97
1 4 6

Iesire

8

Exemplul 2

Intrare

3 1000
1 3 4

Iesire

6

Vrei să rezolvi problema?

Creează-ți un cont gratuit ca să scrii cod în editor, să trimiți soluții la evaluator și să vezi indicațiile.