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
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 Submatrix:
//Solutie problema Matrice
//programare dinamica
//Complexitate N*N
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define dim 1009
using namespace std;
ofstream out("submatrix.out");
int a[dim][dim];
int dp[dim][dim];
int n ;
int sol = 0;
void read();
void debug();
void build();
void solve();
int main()
{
read();
build();
solve();
// debug();
out << sol;
}
void read()
{
ifstream in("submatrix.in");
in >> n;
for(int i = 1; i <=n; i++)
for(int j = 1; j<=n; j++)
in >> a[i][j];
}
void build()
{
//first line
for(int i = 1 ; i<=n ; i++)
dp[1][i] = a[1][i];
//first column
for(int i = 1; i<=n; i++)
dp[i][1] = a[i][1];
}
void solve()
{
//pornim de la a[2][2]
for(int i = 2; i<=n; i++)
for(int j = 2; j<=n; j++)
{
if(a[i][j] == 1)
{
dp[i][j] = min(dp[i-1][j],min(dp[i-1][j-1],dp[i][j-1])) + 1;
}
else
{
dp[i][j] = 0;
}
}
for(int i = 1 ; i<=n; i++)
for(int j = 1 ; j<=n; j++)
if(dp[i][j] > sol)
sol = dp[i][j];
}
void debug()
{
for(int i = 1; i<=n ; i++)
{
for(int j = 1; j<=n; j++)
cerr << dp[i][j] << " ";
cerr << '\n';
}
}
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 #1441 Submatrix
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1441 Submatrix 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!