fbpx

Problema #1441 – Submatrix – Rezolvari PBInfo

de Mihai-Alexandru

După ce a rezolvat problema propusă de tatăl sau, Robert a prins drag de algoritmică. După câteva probleme rezolvate a dat peste o problemă pe care nu a putut-o rezolva. Având o matrice pătratică cu elemente 0 și 1 el trebuie sa afle dimensiunea maximă a unei submatrice pătratice ce conține numai valori 1. Robert este foarte confuz, și vă roagă din nou să îl ajutați. Ca răsplată vă promite 100 de puncte dacă îl ajutați să rezolve și această problemă. Ce ziceți ? Îl ajutăm din nou ?

Cerința

Fiind dată o matrice pătratică de dimensiune n cu valori 0 și 1, să se determine dimensiunea maximă a unei submatrice ce conține numai valori 1.

Date de intrare

Fișierul de intrare submatrix.in conține pe prima linie numărul n reprezentând dimensiunea matricei. Următoarele n linii conțin câte n numere din mulțimea {0,1}.

Date de ieșire

Fișierul de ieșire submatrix.out va conține pe prima linie o valoare naturală L, reprezentând dimensiunea maxima a unei submatrice ce conține numai valori 1.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • Pentru 10% din teste n≤10

Exemplul 1

submatrix.in

4
1 1 0 1
1 1 0 0
1 0 1 1
1 1 0 1

submatrix.out

2

Exemplul 2

submatrix.in

4
1 1 1 1
1 1 1 1
1 1 1 0
1 1 1 0

submatrix.out

3
#include <bits/stdc++.h>
using namespace std;
ifstream cin("submatrix.in");
ofstream cout("submatrix.out");
int n , a[1001][1001] , d[1001][1001] , maxi;
int main()
{
    cin >> n;
    for(int i = 1 ; i <= n ; ++i)
        for(int j = 1 ; j <= n ; ++j)
    {
        cin >> a[i][j];
        if(i==1) d[1][j]=a[i][j];
        else if(j==1) d[i][1]=a[i][j];
    }
    for(int i = 2 ; i <= n ; ++i)
        for(int j = 2 ; j <= n ; ++j)
        {
            if(a[i][j]==1) d[i][j]=min(d[i-1][j] , min(d[i-1][j-1] , d[i][j-1]))+1;
            if(d[i][j]>maxi) maxi=d[i][j];
        }
    cout << maxi;
}
Comentarii

S-ar putea sa iti placa