Pagini recente » Cod sursa (job #2083299) | Cod sursa (job #2291448) | Cod sursa (job #2521536) | Cod sursa (job #1826580) | Cod sursa (job #965870)
Cod sursa(job #965870)
#include <iostream>
#include <fstream>
using namespace std;
int board[20][20];
int aux[20][20];
int N, M;
void load ()
{
ifstream in ("flip.in");
in >> N;
in >> M;
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
in >> board[i][j];
}
void copy ()
{
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
aux[i][j] = board[i][j];
}
void flipLine (int line)
{
for (int i = 0; i < M; i++)
aux[line][i] *= -1;
}
void flipRow (int row)
{
for (int i = 0; i < N; i++)
aux[i][row] *= -1;
}
void flip (unsigned int linesFlipped, unsigned int rowsFlipped)
{
unsigned int mask = 1;
int count = 0;
while (mask < N)
{
if (mask & linesFlipped)
flipLine (count);
mask = mask << 1;
count ++;
}
mask = 1;
count = 0;
while (mask < M)
{
if (mask & rowsFlipped)
flipRows (count);
mask = mask << 1;
count ++;
}
}
int sum ()
{
int sum = 0;
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
sum += aux[i][j];
}
int main ()
{
int max = 0;
load ();
for (int linesFlipped = 0; linesFlipped < ((1 << (N-1)) - 1); linesFlipped ++)
for (int rowsFlipped = 0; rowsFlipped < ((1 << (M-1)) - 1); rowsFlipped ++)
{
copy ();
flip (linesFlipped, rowsFlipped);
int s;
s = sum ();
if (max < s)
max = s;
}
ofstream out ("flip.out");
out << max << endl;
out.close();
return 0;
}