Cod sursa(job #357444)

Utilizator ciorile.chioareBogatu Adrian ciorile.chioare Data 19 octombrie 2009 12:07:59
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
int n,m,a[20][20],b[20][20],max;
bool v[20];
void copiere()
{
	int i,j;
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
			b[i][j]=a[i][j];
}
int sumlin(int x)
{
	int i,s=0;
	for(i=1;i<=m;++i)
		s+=b[x][i];
	return s;
}
int sumtot()
{
	int i,j,s=0;
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
			s+=b[i][j];
	return s;
}
void verif()
{
	int i,j,k=0;
	copiere();
	for(i=1;i<=m;++i)
		if(v[i])
			for(j=1;j<=n;++j)
				b[j][i]*=(-1);
	for(j=1;j<=n;++j)
	{
		if(sumlin(j)<0)
			for(i=1;i<=m;++i)
				b[j][i]*=(-1);
		}
	k=sumtot();
	if(k>max)
		max=k;	
}
void init(bool x[])
{
	int i;
	for(i=1;i<=m;++i)
		x[i]=0;
}
void ciur(int x)
{
	init(v);
	int i=0;
	while(x)
	{
		v[++i]=x%2;
		x/=2;
	}

	verif();
}
int main()
{
	int i,j;
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
			scanf("%d",&a[i][j]);
	for(i=1;i<=1<<m;++i)
		ciur(i);
	printf("%d",max);
}