Cod sursa(job #501859)

Utilizator matei_cChristescu Matei matei_c Data 16 noiembrie 2010 21:04:21
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include<stdio.h>

int n,m,a[17][17],b[17][17],smax,sp,sn,suma,sn2,sp2,suma2,sp3,sn3,suma3;
int main()
{
	int i,j,i2,j2,i3,j3;
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d%d",&n,&m);
/////citesc matr a si o copiez in matr b	
	for(i=1;i<=n;i++)
	{	
		for(j=1;j<=m;j++)
		{	
			scanf("%d",&a[i][j]);
			b[i][j]=a[i][j];
			smax+=b[i][j];
		}
	}	
/////
	for(j=1;j<=m;j++)
	{
		sp=0;
		sn=0;
		for(i=1;i<=n;i++)
		{
			if(b[i][j]>=0)
				sp+=b[i][j];
			else
				sn+=b[i][j];
		}	
		if(sn+sp>=0)
			suma+=sn+sp;
		if(-sn>sp)
		{
			suma+=-sn-sp;
			for(i=1;i<=n;i++)
				b[i][j]=-a[i][j];
			////////
			for(i3=1;i3<=n;i3++)
			{
				sn3=0;
				sp3=0;
				for(j3=1;j3<=m;j3++)
				{
					if(b[i3][j3]<0)
						sn3+=b[i3][j3];
					else
						sp3=b[i3][j3];
				}	
				if(sn3+sp3>=0)
					suma3+=sn3+sp3;
				else
				{
					suma3+=-sn3-sp3;
					for(j3=1;j3<=m;j3++)
						b[i3][j3]=-a[i3][j3];
				}
				if(suma3>smax)
					smax=suma3;
			}	
			///////
		}	
		if(suma>smax)
			smax=suma;
	}
///////
	suma=0;
	for(i=1;i<=n;i++)
	{
		sp=0;
		sn=0;
		for(j=1;j<=m;j++)
		{
			if(b[i][j]>=0)
				sp+=b[i][j];
			else
				sn+=b[i][j];
		}	
		if(sn+sp>=0)
			suma+=sn+sp;
		if(-sn>sp)
		{
			suma+=-sn-sp;
			for(j=1;j<=m;j++)
				b[i][j]=-a[i][j];
			//////////
			for(j2=1;j2<=m;j2++)
			{
				sp2=0;
				sn2=0;
				for(i2=1;i2<=n;i2++)
				{
					if(b[i2][j2]>=0)
					sp2+=b[i2][j2];
				else
					sn2+=b[i2][j2];
				}	
				if(sn2+sp2>=0)
				suma2+=sn2+sp2;
				if(-sn2>sp2)
				{
				suma2+=-sn2-sp2;
				for(i2=1;i2<=n;i2++)
					b[i2][j2]=-a[i2][j2];
			}	
			if(suma2>smax)
			smax=suma2;
		}
			//////////
		}	
		if(suma>smax)
			smax=suma;
	}
	smax=0;
	for(i=1;i<=n;i++)
	{	
		for(j=1;j<=m;j++)
		{	
			//printf("%d ",b[i][j]);
			smax+=b[i][j];
		}
	}	
	printf("%d\n",smax);
	return 0;
}