Cod sursa(job #584786)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 26 aprilie 2011 18:33:46
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#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;
}