Cod sursa(job #423552)

Utilizator deneoAdrian Craciun deneo Data 23 martie 2010 23:53:22
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream.h>
int l, c, sm=0, smax=0, m[20][20];

int tfl(int ln)
{
	int sm=0;
	for(int i=1; i<=c; i++)
		sm+=m[ln][i];
	if(sm<=0)
		return (-sm)*2;
	return 0;
}

int tfc(int cn)
{
	int sm=0;
	for(int i=1; i<=l; i++)
		sm+=m[i][cn];
	if(sm<=0)
		return (-sm)*2;
	return 0;
}

void flipl(int ln)
{
	for(int i=1; i<=c; i++)
		m[ln][i]*=-1;
}

void flipc(int cn)
{
	for(int i=1; i<=l; i++)
		m[i][cn]*=-1;
}

void back()
{
	int i, aux;
	for(i=1; i<=l; i++)
	{
		aux=tfl(i);
		if(aux)
		{
			sm+=aux;
			if(sm>smax)
				smax=sm;
			flipl(i);
			back();
			flipl(i);
			sm-=aux;
		}
	}
	for(i=1; i<=c; i++)
	{
		aux=tfc(i);
		if(aux)
		{
			sm+=aux;
			if(sm>smax)
				smax=sm;
			flipc(i);
			back();
			flipc(i);
			sm-=aux;
		}
	}
}

int main(){
	int i, j;
	ifstream f("flip.in");
	f>>l>>c;
	for(i=1; i<=l; i++)
		for(j=1; j<=c; j++)
		{
			f>>m[i][j];
			sm+=m[i][j];
		}
	smax=sm;
	back();
	ofstream g("flip.out");
	g<<smax;
	g.close();
	return 0;
}