4243 - Mouse

From Bitnami MediaWiki

Un experiment urmăreşte comportarea unui şoricel pus într-o cutie dreptunghiulară, împărţită în n x m cămăruţe egale de formă pătrată. Fiecare cămăruţă conţine o anumită cantitate de hrană. Şoricelul trebuie să pornească din colţul (1, 1) al cutiei şi să ajungă în colţul opus (n, m), mâncând cât mai multă hrană. El poate trece dintr-o cameră în una alăturată (două camere sunt alăturate dacă au un perete comun), mănâncă toată hrana din cămăruţă atunci când intră. Se asemenea, nu va intra niciodată într-o cameră fără hrană.

Cerința[edit | edit source]

Stabiliţi care este cantitatea maximă de hrană pe care o poate mânca.

Date de intrare[edit | edit source]

Fișierul de intrare mouse.in conține pe prima linie două numere n şi m reprezentând numărul de linii respectiv numărul de coloane ale cutiei, iar pe următoarele n linii cele n x m numere reprezentând cantitatea de hrană existentă în fiecare cămăruţă, câte m numere pe fiecare linie, separate prin spaţii.

Date de ieșire[edit | edit source]

În fișierul de ieșire mouse.out se vor scrie pe prima linie două numere separate printr-un spaţiu: numărul de cămăruţe vizitate şi cantitatea de hrană maximă culeasă.

Restricții și precizări[edit | edit source]

  • 1 ≤ n, m ≤ 100
  • cantitatea de hrană din fiecare cămăruță este un număr natural cuprins între 1 și 100.

Exemplu:[edit | edit source]

mouse.in

2 4
1 2 6 3
3 4 1 2

mouse.out

7 21


Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1"> import numpy as np

a = np.zeros((105, 105), dtype=int) n, m = 0, 0

with open("mouse.in", "r") as fin:

   n, m = map(int, fin.readline().split())
   for i in range(1, n+1):
       for j in range(1, m+1):
           a[i][j] = int(fin.readline())

s = np.sum(a) minim = 101 for i in range(1, n+1):

   for j in range(1, m+1):
       if (i + j) % 2 == 1 and minim > a[i][j]:
           minim = a[i][j]

with open("mouse.out", "w") as fout:

   if n % 2 == 1 or m % 2 == 1:
       fout.write(str(n * m) + " " + str(s) + "\n")
   else:
       fout.write(str(n * m - 1) + " " + str(s - minim) + "\n")

</syntaxhighlight>