Pagini recente » Cod sursa (job #1017171) | Cod sursa (job #1754184) | Cod sursa (job #2370757) | Cod sursa (job #2964718) | Cod sursa (job #1732602)
#include <stdio.h>
int N, M;
int grid[16][16];
int temp_grid[16][16];
void read_data(FILE *f)
{
fscanf(f, "%d %d", &N, &M);
int i, j;
for (i = 0; i < N; ++i)
for (j = 0; j < M; ++j)
fscanf(f, "%d", &grid[i][j]);
}
void flip_line(int line)
{
int i;
for (i = 0; i < M; ++i)
temp_grid[line][i] *= -1;
}
void flip_col(int col)
{
int i;
for (i = 0; i < N; ++i)
temp_grid[i][col] *= -1;
}
int col_sum(int col)
{
int i;
int s = 0;
for (i = 0; i < N; ++i)
s += temp_grid[i][col];
return s;
}
int calc_max_sum()
{
int counter = 0;
int max_iter = 1 << N;
int max_sum = 0;
while (counter < max_iter)
{
int i, j;
int cur_sum = 0;
for (i = 0; i < N; ++i)
for (j = 0; j < M; ++j)
temp_grid[i][j] = grid[i][j];
for (i = 0; i < N; ++i)
if ((counter >> i) & 1)
flip_line(i);
for (i = 0; i < M; ++i)
if (col_sum(i) < 0)
flip_col(i);
for (i = 0; i < N; ++i)
for (j = 0; j < M; ++j)
cur_sum += temp_grid[i][j];
if (cur_sum > max_sum)
max_sum = cur_sum;
++counter;
}
return max_sum;
}
int main()
{
FILE *in = fopen("flip.in", "r");
FILE *out = fopen("flip.out", "w");
read_data(in);
fprintf(out, "%d", calc_max_sum());
fclose(in);
fclose(out);
return 0;
}