Pagini recente » Cod sursa (job #547947) | Istoria paginii runda/craciun-viteza-3/clasament | Cod sursa (job #1151106) | Istoria paginii utilizator/nemilosu | Cod sursa (job #2277363)
#include <fstream>
#include <iostream>
#include <math.h>
#include <bitset>
using namespace std;
ifstream fin ("flip.in");
ofstream fout ("flip.out");
int n, m, x[17][17], aux[17][17], aux2[17][17], a;
void reinitializare()
{
int i, j;
for (i = 1; i<= n; i++)
for(j = 1; j<= m; j++)
aux[i][j] = x[i][j];
}
void memorare()
{
int i, j;
for (i = 1; i<= n; i++)
for(j = 1; j<= m; j++)
aux2[i][j] = aux[i][j];
}
void restaurare()
{
int i, j;
for (i = 1; i<= n; i++)
for(j = 1; j<= m; j++)
aux[i][j] = aux2[i][j];
}
void flip_lin(int linie)
{
int i;
for (i = 1; i<= m; i++)
aux[linie][i] *= -1;
}
void flip_col(int coloana)
{
int i;
for (i = 1; i<= n; i++)
aux[i][coloana] *= -1;
}
int suma()
{
int i, j, s = 0;
for (i = 1; i<= n; i++)
for(j = 1; j<= m; j++)
s+=aux[i][j];
return s;
}
int main()
{
int i, j, submult_lin, submult_col, l, k, s_max=0, s;
fin >> n >> m;
for (i = 1; i<= n; i++)
for(j = 1; j<= m; j++)
fin >> x[i][j];
submult_lin = (1 << n)-1;
submult_col = (1<<m) -1;
for (i = 1; i<= submult_lin; i++)
{
reinitializare();
// flipuri pe linii pentru submultimea i
for(j = 0; j<submult_lin; j++)
if (((i >> j) & 1) != 0)
{
flip_lin(j+1);
}
for (l = 1; l<= submult_col; l++)
{
memorare();
// flipuri pe coloane pentru submultimea j
for(k = 0; k<submult_lin; k++)
if (((l >> k) & 1) != 0)
{
flip_col(k+1);
}
s = suma();
if (s > s_max)
s_max = s;
restaurare();
}
}
fout << s_max;
return 0;
}