Pagini recente » Cod sursa (job #2245568) | Cod sursa (job #1924203) | Cod sursa (job #2267309) | Cod sursa (job #2367688) | Cod sursa (job #2153916)
#include <fstream>
/*
3 5 1
0 0 0 0 1
0 1 0 0 0
0 0 0 1 0
*/
int main(int argc, const char * argv[]) {
std::ifstream f("teren.in");
std::ofstream g("teren.out");
int N, M, X;
f >> N >> M >> X;
int S[1000][1000] = { 0 };
int a[1000][1000];
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
f >> a[i][j];
if (i == 1 && j == 1) {
S[i][j] = a[i][j];
} else if (i == 1) {
S[i][j] = a[i][j] + S[i][j - 1];
} else if (j == 1) {
S[i][j] = a[i][j] + S[i - 1][j];
} else {
S[i][j] = a[i][j] + S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1];
}
}
}
int Amax = 0;
for (int l1 = 1; l1 <= N; l1++) {
for (int l2 = l1; l2 <= N; l2++) {
int A[1000];
for (int j = 1; j <= M; j++) {
A[j] = S[l2][j] - S[l2][j - 1] - S[l1 - 1][j] + S[l1 - 1][j - 1];
}
int i = 1, s = 0;
for (int j = 1; j <= M; j++) {
s += A[j];
while (i <= j && s > X) {
s -= A[i];
i++;
}
if (i <= j) {
Amax = std::max(Amax, (j - i + 1) * (l2 - l1 + 1));
}
}
}
}
g << Amax;
return 0;
}