Pagini recente » Cod sursa (job #2809494) | Cod sursa (job #168823) | Cod sursa (job #609822) | Cod sursa (job #597747) | Cod sursa (job #2723498)
#include <fstream>
using namespace std;
int a[302][302], S[302][302];
int n, m, i, j, i1, j1, i2, j2, x, suma, maxim;
int main() {
ifstream fin ("teren.in");
ofstream fout("teren.out");
fin>>n>>m>>x;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++) {
fin>>a[i][j];
S[i][j] = S[i-1][j] + a[i][j];
}
/// S[i][j] = suma de pe coloana j de sus pana in punctul (i,j)
/**
3 5 1
0 0 1 0 1
0 1 1 0 0
0 0 0 1 0
0 0 1 0 1
0 1 2 0 1
0 1 2 1 1
**/
for (i1=1;i1<=n;i1++)
for (j1=1;j1<=m;j1++) {
/// imi imaginez ca (i1,j1) este coltul din stanga sus al unui dreptunghi
for (i2 = i1;i2<=n;i2++)
for (j2=j1;j2<=m;j2++) {
/// fac suma submatricei cu coltul st sus (i1, j1) si
/// dreapta jos (i2, j2)
suma = 0;
for (j=j1;j<=j2;j++)
suma += (S[i2][j] - S[i1-1][j]);
if (suma <= x && (i2-i1+1)*(j2-j1+1) > maxim)
maxim = (i2-i1+1)*(j2-j1+1);
}
}
fout<<maxim;
}