Cod sursa(job #584786)
#include <iostream>
#include <fstream>
using namespace std;
int N, M, Stiva[33];
long Flip[16][16], S;
void Citire ()
{
ifstream fin ("flip.in");
int i, j;
fin >> N >> M;
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
{
fin >> Flip[i][j];
S+=Flip[i][j];
}
}
fin.close ();
}
void Afisare ()
{
ofstream fout ("flip.out");
fout << S << "\n";
fout.close ();
}
void Back (int k)
{
int i, j, Schimb[16][16];
long SCurent=0;
if (k<N+M)
{
for (i=0; i<=1; i++)
{
Stiva[k]=i;
Back (k+1);
}
}
else
{
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
{
Schimb[i][j]=1;
}
}
for (i=0; i<N; i++)
{
if (Stiva[i]==1)
{
for (j=0; j<M; j++)
{
Schimb[i][j]*=(-1);
}
}
}
for (j=N; j<N+M; j++)
{
if (Stiva[j]==1)
{
for (i=0; i<N; i++)
{
Schimb[i][j-N]*=(-1);
}
}
}
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
{
SCurent+=(Flip[i][j]*Schimb[i][j]);
}
}
if (SCurent>S)
{
S=SCurent;
}
}
}
int main ()
{
Citire ();
Back (0);
Afisare ();
return 0;
}