Pagini recente » Cod sursa (job #221307) | Cod sursa (job #1810714) | Cod sursa (job #164548) | Cod sursa (job #515744) | Cod sursa (job #2078814)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream in("bmatrix.in");
ofstream out("bmatrix.out");
const int Nmax = 205;
int x1, x2, y1, y2;
int n, m, rez, last, sol, maxim, neg, R;
int sum[Nmax][Nmax], v[Nmax][Nmax];
char s[Nmax];
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++)
{
in.get();
in.get(s, Nmax);
for (int j = 0; j < strlen(s); j++)
{
sum[i][j + 1] = sum[i][j] + s[j] - '0';
}
}
for (int i = 1; i <= m; i++)
{
for (int j = i; j <= m; j++)
{
rez = 0;
last = 0;
for (int l = 1; l <= n; l++)
{
rez = sum[l][j] - sum[l][i - 1];
if (rez > 0)
{
rez = 0;
sol = 0;
last = l;
}
else
{
sol = (l - last) * (j - i + 1);
if (sol > maxim)
{
maxim = sol;
x1 = last + 1;
y1 = i;
x2 = l;
y2 = j;
}
}
}
}
}
for (int i = x1; i <= x2; i++)
for (int j = y1; j <= y2; j++)
v[i][j] = -1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
v[i][j] = v[i][j - 1] + v[i][j];
R = R + maxim;
maxim = 0;
for (int i = 1; i <= m; i++)
{
for (int j = i; j <= m; j++)
{
rez = 0;
last = 0;
for (int l = 1; l <= n; l++)
{
rez = sum[l][j] - sum[l][i - 1];
if (rez > 0)
{
rez = 0;
sol = 0;
neg = 0;
last = l;
}
else
{
neg = neg + v[l][j] - v[l][i - 1];
sol = (l - last) * (j - i + 1) + neg;
maxim = max(maxim, sol);
}
}
}
}
R = R + maxim;
out << R;
return 0;
}