Cerința
Gigel are o livadă împărțită în n*m
sectoare, dispuse pe n
linii, numeroate de la 1
la n
și m
coloane, numerotate de la 1
la m
. În fiecare sector se află un cireș, care conține o cantitate de cireșe cunoscută. Gigel va culege toate cireșele din cireșii dispuși într-o zonă dreptunghiulară din livadă. El poate să aleagă între k
zone și dorește să culeagă cât mai multe cireșe.
Scrieți un program care determină cantitatea maximă de cireșe pe care o poate culege Gigel din una dintre cele k
zone date.
Date de intrare
Programul citește de la tastatură numerele n m k
, cu semnificația de mai sus. Apoi citește cantitatea de cireșe din fiecare sector, linie cu linie. Apoi citește k
perechi de coordonate i1 j1 i2 j2
, unde i1 j1
reprezintă coordonatele (linie coloana) ale colțului stânga-sus al zonei curente, iar i2 j2
reprezintă coordonatele (linie coloana) ale colțului dreapta-jos al zonei curente.
Date de ieșire
Programul va afișa pe ecran numărul C
, reprezentând cantitatea maximă de cireșe care poate fi culeasă din una dintre zonele date.
Restricții și precizări
1 ≤ n , m , k ≤ 100
- cantitatea de cireșe din fiecare sector este un număr natural mai mic decât
1000
1 ≤ i1 ≤ i2 ≤ n
1 ≤ j1 ≤ j2 ≤ m
Exemplu
Intrare
4 6 3 3 1 10 7 5 2 1 5 3 8 6 3 10 1 3 8 10 8 6 1 8 3 9 1 2 2 3 5 1 2 4 6 2 1 4 3
Ieșire
102
Explicație
Cantitatea de cireșe care pot fi culese din zona a doua este 102
și este mai mare decât cantitățile din celelalte două zone.
#include <bits/stdc++.h> using namespace std; int a[101][101], n, m, k; int main(){ cin >> n >> m >> k; for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) cin >> a[i][j]; int x1,y1,x2,y2; int max = 0; for(int l = 1; l <= k; ++l){ cin >> x1 >> y1 >> x2 >> y2; int sum = 0; for(int i = x1; i <= x2; ++i) for(int j = y1; j <= y2; ++j) sum += a[i][j]; if(sum > max) max = sum; } cout << max; return 0; }