Pagini recente » Cod sursa (job #87149) | Cod sursa (job #1460257) | Cod sursa (job #2509015) | Cod sursa (job #2643585) | Cod sursa (job #188644)
Cod sursa(job #188644)
#include <cstdio>
#include <bitset>
using namespace std;
int n, m, s[18], x[18][18], spart, smax;
bitset<18> f;
void calculeaza();
void citire()
{
int i, j;
FILE *f1;
f1 = fopen("flip.in", "r");
fscanf(f1, "%d %d\n", &n, &m);
if (n < m)
for (i = 1; i <= n; ++i)
for (j = 1; j <= m; ++j) {
fscanf(f1, "%d", &x[i][j]);
x[0][j] += x[i][j];
}
else {
swap(n, m);
for (j = 1; j <= m; ++j)
for (i = 1; i <= n; ++i) {
fscanf(f1, "%d", &x[i][j]);
x[0][j] += x[i][j];
}
}
fclose(f1);
}
void back(int k)
{
if (k == n + 1) {
calculeaza();
return;
}
back(k + 1);
f[k] = !f[k];
back(k + 1);
}
void calculeaza()
{
int i, j;
for (j = 1; j <= m; ++j) s[j] = x[0][j];
for (i = 1; i <= n; ++i)
if (f[i])
for (j = 1; j <= m; ++j)
s[j] -= 2 * x[i][j];
spart = 0;
for (j = 1; j <= m; ++j)
if (s[j] < 0) spart -= s[j];
else spart += s[j];
if (smax < spart) smax = spart;
}
void afisare()
{
FILE *f2;
f2 = fopen("flip.out", "w");
fprintf(f2, "%d\n", smax);
fclose(f2);
}
int main()
{
citire();
back(1);
afisare();
return 0;
}