# PBinfo #3410 – SubmatrixSumMax – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

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

## Cod sursă C++

```cpp
#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;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3410)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3410/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3410/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
