Pagini recente » Diferente pentru utilizator/mihaelacismaru intre reviziile 47 si 48 | Diferente pentru preoni-2007/runda-3 intre reviziile 6 si 5 | Diferente pentru utilizator/deehoroejkoli intre reviziile 148 si 149 | Bordura | Cod sursa (job #584798)
Cod sursa(job #584798)
#include <iostream>
#include <fstream>
using namespace std;
int N, M, Stiva[33];
long long Flip[17][17], 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];
}
}
fin.close ();
}
void Afisare ()
{
ofstream fout ("flip.out");
fout << S << "\n";
fout.close ();
}
void Back (int k)
{
int i, j;
long SCurent=0, Element;
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<M; j++)
{
Element=Flip[i][j];
if (Stiva[i]==1)
{
Element*=(-1);
}
if (Stiva[N+j]==1)
{
Element*=(-1);
}
SCurent+=Element;
}
}
if (SCurent>S)
{
S=SCurent;
}
}
}
void Baza2 (int n)
{
int i=0;
while (n>0)
{
Stiva[i++]=n%2;
n/=2;
}
while (i<=32)
{
Stiva[i++]=0;
}
}
int main ()
{
int n, i, j, ConfiguratieMax;
long long SCurent, Element;
Citire ();
//Back (0);
ConfiguratieMax=1<<(M+N);
for (n=0; n<ConfiguratieMax; n++)
{
Baza2 (n);
SCurent=0;
for (i=0; i<N; i++)
{
for (j=0; j<M; j++)
{
Element=Flip[i][j];
if (Stiva[i]==1)
{
Element*=(-1);
}
if (Stiva[N+j]==1)
{
Element*=(-1);
}
SCurent+=Element;
}
}
if (SCurent>S)
{
S=SCurent;
}
}
Afisare ();
return 0;
}