Cod sursa(job #584860)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 26 aprilie 2011 20:48:47
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#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;
}