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

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

Date de intrare

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

Î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

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

Exemplu:

mouse.in

2 4
1 2 6 3
3 4 1 2

mouse.out

7 21


Încărcare soluție

Lipește codul aici

<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>