Pagini recente » Cod sursa (job #994336) | Cod sursa (job #545409) | Cod sursa (job #3255915) | Cod sursa (job #749389) | Cod sursa (job #695701)
Cod sursa(job #695701)
#include <stdio.h>
#include <iostream>
#define ifile "flip.in", "r"
#define ofile "flip.out", "w"
using namespace std;
FILE * f=fopen(ifile);
FILE * g=fopen(ofile);
#define TMax 17
// N M N linii
int T[TMax][TMax], N, M, L[TMax], COM, SMax = 0;
int step1()
{
fscanf(f, "%d %d", &N, &M);
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
fscanf(f, "%d", &T[i][j]),
L[i] += T[i][j];
return 0;
}
int sumUp()
{
int cSum = 0;
for(int i = 0; i < N; i++) cSum += L[i];
if(cSum > SMax) SMax = cSum;
return cSum;
}
int cSwitch(int c)
{
for(int i = 0; i < N; i++)
{
int prev = T[i][c];
T[i][c] *= -1;
L[i] = L[i] - prev + T[i][c];
}
return 0;
}
int lSwitch(int l)
{
int lSum = 0;
for(int i = 0; i < M; i++)
{
T[l][i] *= -1;
lSum += T[l][i];
}
L[l] = lSum;
return 0;
}
int handleCOM()
{
for(int i = 0; i < N; i++)
if((COM & (1 << i))) lSwitch(i);
for(int i = 0; i < M; i++)
if((COM & (1 << (N + i)))) cSwitch(i);
return 0;
}
int step2()
{
int K = N + M + 1;
while((COM & (1 << K)) == 0)
{
COM++;
handleCOM();
sumUp();
handleCOM();
}
return 0;
}
int step3()
{
fprintf(g, "%d", SMax);
return 0;
}
int main()
{
step1();
step2();
step3();
return 0;
}