Pagini recente » Cod sursa (job #1473071) | Cod sursa (job #1574843) | Cod sursa (job #1626872) | Cod sursa (job #1877981) | Cod sursa (job #221831)
Cod sursa(job #221831)
#include <cstdio>
#include <cstring>
using namespace std;
#define FIN "teren.in"
#define FOUT "teren.out"
#define MAX_N 305
int Map[MAX_N][MAX_N];
int D[MAX_N][MAX_N];
int A[MAX_N];
int S[MAX_N];
int BEST;
int N, M, X;
void preproc ()
{
int i, j;
for (j = 1; j <= M; ++j)
for (i = 1; i <= N; ++i)
D[i][j] = D[i - 1][j] + Map[i][j];
}
int main ()
{
int i, j, l1, l2, k, li, lf;
freopen (FIN, "r", stdin);
freopen (FOUT, "w", stdout);
scanf ("%d %d %d", &N, &M, &X);
for (i = 1; i <= N; ++i)
for (j = 1; j <= M; ++j)
scanf ("%d", Map[i] + j);
preproc ();
for (l1 = 1; l1 <= N; ++l1)
for (l2 = l1; l2 <= N; ++l2)
{
for (k = 1; k <= M; ++k) A[k] = D[l2][k] - D[l1 - 1][k];
for (k = 1; k <= M; ++k) S[k] = S[k - 1] + A[k];
li = lf = 0;
while (lf <= M)
{
if (S[lf] - S[li] <= X) ++lf;
while (S[lf] - S[li] > X && li < lf) ++li;
if (S[lf] - S[li] <= X)
if ((lf - li) * (l2 - l1 + 1) > BEST) BEST = (lf - li) * (l2 - l1 + 1);
}
}
printf ("%d\n", BEST);
return 0;
}