Pagini recente » Cod sursa (job #665585) | Cod sursa (job #2891765) | Cod sursa (job #368358) | Clasament fafaf | Cod sursa (job #651757)
Cod sursa(job #651757)
#include <fstream>
#define InFile "flip.in"
#define OutFile "flip.out"
using namespace std;
ifstream in(InFile);
ofstream out(OutFile);
int matrice[17][17];
int reverseM[17];
int maxim;
void increase(int m)
{
reverseM[m]++;
while(reverseM[m] % 2 == 0)
{
reverseM[m] = 0;
m--;
reverseM[m]++;
}
}
void citire(int &n, int &m)
{
in>>n>>m;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
in>>matrice[i][j];
}
}
}
int getSuma(int &n, int &m)
{
int s = 0;
int sLinie;
for(int i = 1; i <= n; i++)
{
sLinie = 0;
for(int j = 1; j <= m; j++)
{
s += matrice[i][j];
sLinie += matrice[i][j];
}
matrice[i][0] = sLinie;
}
return s;
}
int inverse(int &n,int &m)
{
int asFarAs = 1;
int s = 0;
for(int i = 1; i <= m; i++)
{
asFarAs*=2;
}
for(int i = 1; i <= asFarAs; i++)
{
increase(m);
for(int j = 1; j <= m; j++)
{
if(reverseM[j])
{
for(int h = 1; h <= n; h++)
{
matrice[h][j] *= -1;
}
}
}
s = getSuma(n, m);
for(int j = 1; j <= n; j++)
{
if(matrice[j][0] < 0)
{
s -= (2*matrice[j][0]);
}
}
if(s > maxim)
{
maxim = s;
}
for(int j = 1; j <= m; j++)
{
if(reverseM[j])
{
for(int h = 1; h <= n; h++)
{
matrice[h][j] *= -1;
}
}
}
}
return maxim;
}
int main()
{
int n, m;
citire(n, m);
out<<inverse(n, m);
return 0;
}