Mai intai trebuie sa te autentifici.

Cod sursa(job #558378)

Utilizator raul1520Raul Andrei raul1520 Data 17 martie 2011 11:24:10
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
using namespace std;
int n,m,a[17][17],b[17][17],sc[17],sc2[17],sl2[17],sl[17],i,j,s,smax,q,t,r,w,z,k,e;
void Citeste()
{
	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]);
			b[i][j]=a[i][j];
			sc[j]=sc[j]+a[i][j];
			sl[i]=sl[i]+a[i][j];
		}
	}
}
void Schimba(int i,int p)
{
	if(p==1);
		if(sc[i]<-sc[i])
		{
			sc2[i]=-sc[i];
			for(j=1;j<=n;j++)
			{
				a[j][i]=-a[j][i];
				sl[j]=sl[j]-2*a[j][i];
			}
		}
	else
		if(sl[i]<-sl[i])
		{
			sl2[i]=-sl[i];
			for(j=1;j<=n;j++)
			{
				a[i][j]=-a[i][j];
				sc[j]=sc[j]-2*a[i][j];
			}
		}
}
void Scrie()
{
	printf("%d",smax);
}
int main()
{
	Citeste();
	q=(1<<n);
	w=(1<<m);
	for(j=1;j<=w;j++)
	{
		r=0;
		t=j;
		while(t!=0)
		{
			r++;
			if(t%2==1)
			{
				Schimba(r,1);
			}
			t=t/2;
		}
		for(i=1;i<=q;i++)
		{
			r=0;
			z=i;
			while(z!=0)
			{
				r++;
				if(z%2==1)
				{
					Schimba(r,2);
				}
				z=z/2;
			}
			for(k=1;i<=n;i++)
			{
				s=s+sl[i];
			}
			if(s>smax)
				smax=s;
			s=0;
			for(k=1;k<=n;k++)
				for(e=1;e<=m;e++)
					a[k][e]=b[k][e];
		}
	}
	Scrie();
	return 0;
}