Se dă o matrice de numere întregi cu n
linii și n
coloane.
Cerința
Să se determine suma maximă care se poate obține dintr-o submatrice.
Date de intrare
Programul citește de la tastatură numărul n
, iar apoi elementele matricei cu n
linii și n
coloane.
Date de ieșire
Programul va afișa pe ecran suma maximă care se poate obține dintr-o submatrice.
Restricții și precizări
1 ≤ n ≤ 300
- Elementele matricei sunt numere întregi din intervalul
[-1000, 1000]
- O submatrice poate fi formată dintr-un singur element
Exemplu
Intrare
5 2 4 -1 2 -1 4 -7 1 -6 -1 -9 2 4 5 -7 1 3 -2 6 2 1 -4 -6 -5 8
Ieșire
18
Explicație
Submatricea de sumă maximă este:
2 4 5
3 -2 6
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema SubmatrixSumMax:
#include <bits/stdc++.h>
using namespace std;
int a[305][305], b[305][305], v[305], n;
void Citire()
{
int i, j;
cin >> n;
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; j++)
cin >> a[i][j];
}
void SumePartiale()
{
int i, j;
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; j++)
b[i][j] = a[i][j] + b[i-1][j];
}
int SecSumMax(int v[], int n)
{
int i, s, smax;
s = smax = v[1];
if (s < 0) s = 0;
for (i = 2; i <= n; ++i)
{
s += v[i];
if (s > smax) smax = s;
if (s < 0) s = 0;
}
return smax;
}
void Solutie()
{
int i1, i2, j, ssmax, suma;
ssmax = -200000000;
for (i1 = 1; i1 <= n; ++i1)
for (i2 = i1; i2 <= n; ++i2)
{
for (j = 1; j <= n; j++)
v[j] = b[i2][j] - b[i1 - 1][j];
suma = SecSumMax(v, n);
ssmax = max(ssmax, suma);
}
cout << ssmax;
}
int main()
{
Citire();
SumePartiale();
Solutie();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #3410 SubmatrixSumMax
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3410 SubmatrixSumMax de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!