Cod sursa(job #729030)

Utilizator mattapoMatei Apolzan mattapo Data 29 martie 2012 10:45:06
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
int v[17],x,mode,total=0,max=0,a[17][17],m,n;
void prelucrare (int p)
{
	int i,j,coptotal=total;
	if (mode==1)
	{
		for (i=1;i<=p;i++)
			coptotal=coptotal-(2*a[v[i]][0]);
		for (i=1;i<=m;i++)
		{
			if (a[0][i]<0)
			{
				coptotal=coptotal-(2*a[0][i]);
				for (j=1;j<=p;j++)
					coptotal=coptotal-(2*a[v[j]][i]);
			}
		}
	}
	else
	{
		for (i=1;i<=p;i++)
			coptotal=coptotal-(2*a[0][v[i]]);
		for (i=1;i<=n;i++)
		{
			if (a[i][0]<0)
			{
				coptotal=coptotal-(2*a[i][0]);
				for (j=1;j<=p;j++)
					coptotal=coptotal-(2*a[i][v[j]]);
			}
		}
	}
	if (max<coptotal)
		max=coptotal;
}
void bkt (int p)
{
	int i;
	prelucrare(p-1);
	for (i=1+v[p-1];i<=x;i++)
	{
		v[p]=i;
		bkt(p+1);
	}
}
int main ()
{
	int i,j;
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d %d",&n,&m);
	if (n<m)
	{
		mode=1;
		x=n;
	}
	else
	{
		mode=0;
		x=m;
	}
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
		{
			scanf("%d",&a[i][j]);
			a[i][0]=a[i][0]+a[i][j];
			a[0][j]=a[0][j]+a[i][j];
			total=total+a[i][j];
		}
	bkt(1);
	printf("%d",max);
	return 0;	
}