| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 1024 MB | 3 | 3 | 3 | 100.000% |
푁 przyjaciół pojechało na wycieczkę. Podczas wycieczki często trzeba płacić za różne aktywności (taksówka, napiwek w hotelu, obiad w restauracji etc.). Przyjaciele policzyli ile kto komu jest winny i powstała z tego macierz Ai,j określająca ile w sumie bajtalarów przyjaciel numer i winny jest przyjacielowi numer j (przyjaciół numerujemy od jedynki). Oczywiście zagwarantowane jest, że: Ai,j = −Aj,i.
Nadszedł czas rozliczeń po wycieczce i przyjaciele chcą spłacić wszystkie swoje zobowiązania, żeby wyjść „na zero”. Najłatwiej oczywiście rozliczyć się przelewem, ale niestety, banki lubią sobie pobierać sowite prowizje za każdy przelew. Przyjaciele postanowili, że rozliczą się sprytnie: każdego przecież interesuje tylko, żeby w sumie dostał/zapłacił tyle ile trzeba, nie ma znaczenia od kogo dostał lub komu zapłacił, byle na końcu bilans wszystkich kont się zgadzał. Ile najmniej przelewów należy wykonać?
Napisz program, który wczyta N oraz macierz A, wyznaczy minimalną liczbę przelewów niezbędnych do uregulowania wszystkich zobowiązań i wypisze wynik na standardowe wyjście.
W pierwszym wierszu wejścia znajduje się jedna liczba naturalna N (1 ≤ N ≤ 16) określająca liczbę przyjaciół. W kolejnych N wierszach znajduje się po N liczb całkowitych Ai,j (−109 ≤ Ai,j ≤ 109).
W pierwszym (jedynym) wierszu wyjścia powinna się znaleźć jedna liczba całkowita – minimalna liczba przelewów niezbędnych do uregulowania zobowiązań między przyjaciółmi.
5 0 -1 -1 0 0 1 0 -1 0 0 1 1 0 0 0 0 0 0 0 5 0 0 0 -5 0
2
Wyjaśnienie do przykładu: Wystarczy, że czwarta i piąta osoba między sobą wykonają jeden przelew, tak samo pierwsza i trzecia osoba. Druga osoba nie musi otrzymać lub wykonać przelewu. Nie da się wykonać mniej, niż dwóch przelewów.
4 0 2 -1 2 -2 0 -3 3 1 3 0 -4 -2 -3 4 0
2