3264 - Sum Min XI

De la Universitas MediaWiki

Cerinţa

Se dă o matrice pătratică cu n lini şi n coloane şi elemente numere întregi. Determinaţi cea mai mică sumă a n elemente din matrice, obținută adunând câte un element de pe fiecare coloană a matricei.

Date de intrare

Fişierul de intrare summin_xiin.txt conţine pe prima linie numărul n, iar pe următoarele n linii câte n numere întregi, separate prin spaţii, reprezentând elementele matricei.

Date de ieșire

Fişierul de ieşire summin_xiout.txt va conţine pe prima linie numărul S, reprezentând suma minimă determinată.

Restricţii şi precizări

  • 1 ⩽ n⩽ 100
  • elementele matricei vor avea cel mult 4 cifre

Exemplu 1

summin_xiin.txt
4
12 16 5 4
11 14 6 7
8 2 3 17
10 9 13 15
summin_xiout.txt
Datele de intrare corespund restrictiilor impuse
17


Exemplu 2

summin_xiin.txt
4000
12 16 5 4
11 14 6 7
8 2 3 17
10 9 13 15
summin_xiout.txt
Datele de intrare nu corespund restrictiilor impuse


Explicatie

17=8+2+3+4.

Rezolvare

def suma_minima(matrice):
    # Calculează suma minimă a elementelor din matrice, adunând câte un element de pe fiecare coloană.

    suma = 0
    for coloana in zip(*matrice):
        suma += min(coloana)
    return suma


def main():
    with open('summin_xiin.txt', 'r') as fin, open('summin_xiout.txt', 'w') as fout:
        n = int(fin.readline().strip())
        matrice = [list(map(int, linie.split())) for linie in fin.readlines()]

        # Verifică dacă datele de intrare respectă restricțiile
        if not (1 <= n <= 100 and all(0 <= x < 10000 for linie in matrice for x in linie)):
            fout.write("Datele de intrare nu corespund restrictiilor impuse\n")
            return

        fout.write("Datele de intrare corespund restrictiilor impuse\n")

        suma = suma_minima(matrice)
        fout.write(f"{suma}\n")


if __name__ == "__main__":
    main()