Cod sursa(job #292611)

Utilizator razvan_3dragomir razvan razvan_3 Data 31 martie 2009 12:18:30
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream.h>
ifstream intrare("flip.in");
ofstream iesire("flip.out");
long int a[17][17],maxim;
int n,m,sol[35];
void citeste()
{
	intrare>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			intrare>>a[i][j];
			a[0][j]+=a[i][j];
			a[i][0]+=a[i][j];
		}
	}
}
long int calculeaza()
{
	long int s=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(sol[i]==sol[n+j])s+=a[i][j];
			else s-=a[i][j];
		}
	}
	//if(maxim<s)maxim=s;
	return s;
}
void back1(int k,long int s)
{
	if(k==n+m+1)
	{
		if(s>maxim)maxim=s;
	}
	else
	{
		sol[k]=0;
		back1(k+1,s);
		sol[k]=1;
		for(int i=1;i<=n;i++)
			if(sol[i]==0)s-=2*a[i][k-n];
			else s+=2*a[i][k-n];
		back1(k+1,s);
	}
}

void back(int k,long int s)
{
	if(k==n+1)back1(k,s);
	else
	{
		sol[k]=1;
		back(k+1,s-2*a[k][0]);
		sol[k]=0;
		back(k+1,s);
	}
}
int main()
{
	citeste();
	maxim=-10000;
	long int s=0;
	for(int i=1;i<=n;i++)
		s+=a[i][0];
	back(1,s);
	iesire<<maxim;
	return 0;
}