Przy stole jest ludzi. th osoba musi zapłacić dolarów.
Niektórzy ludzie nie mają odpowiednich rachunków, aby zapłacić dokładnie , dlatego opracowali następujący algorytm.
Po pierwsze, wszyscy kładą na stole część swoich pieniędzy. Następnie każda osoba odbiera nadpłacone pieniądze.
Rachunki mają ustalony zestaw nominałów (nie stanowi części danych wejściowych).
Przykład: Załóżmy, że są dwie osoby, Alice i Bob. Alice jest winna 5 USD i ma pięć rachunków za 1 USD . Bob jest winien 2 USD i ma jeden 5 USD . Po tym, jak Alice i Bob położyli wszystkie swoje pieniądze na stole, Bob zabiera 3 $ i wszyscy są szczęśliwi.
Oczywiście są chwile, w których nie trzeba odkładać wszystkich pieniędzy na stół. Na przykład, jeśli Alicja miała tysiąc rachunków za 1 USD , nie musi kłaść ich wszystkich na stole, a następnie odbierać większość z nich.
Chcę znaleźć algorytm o następujących właściwościach:
Dane wejściowe określają liczbę osób, ile każda osoba jest winna i ile rachunków każdej denominacji ma każda osoba.
Algorytm mówi każdej osobie, które rachunki należy postawić na stole w pierwszej rundzie.
Algorytm mówi każdej osobie, które rachunki należy usunąć ze stołu w drugiej rundzie.
Liczba rachunków postawionych na stole + liczba rachunków usuniętych ze stołu jest zminimalizowana.
Jeśli nie ma wykonalnego rozwiązania, algorytm po prostu zwraca błąd.