Cod sursa(job #127058)

Utilizator eddieOlariu Eduard Iuliu eddie Data 23 ianuarie 2008 12:06:19
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
long n,m,x[20][20],v[50],l[20],c[20],ll[20],cc[20];
long s,ss;
void verifica()
{
	for (int i=1;i<=m;i++)

		if ( cc[i]<0 )
		{
		for (int j=1;j<=n;j++)
				ll[j]=ll[j]-x[j][i]-x[j][i];
			cc[i]*=-1;
		}
	ss=0;
	for (int i=1;i<=n;i++)
		ss+=ll[i];
	if ( ss>s )
		s=ss;
}
void submultimi(int k)
{
	int i=k;
	while ( i>=1 )
	{
		i=k;
		while ( v[i]==1 && i>=1 )
		{
			v[i]=0;
			i--;
		}
		v[i]=1;
		for (int j=1;j<=n;j++)
		{
			ll[j]=l[j];
			if ( v[j]==1 )
			{
				ll[j]=l[j]*-1;
				ll[j]=l[j]*-1;
				for (int h=1;h<=m;h++)
					cc[h]=c[h]-x[j][h]-x[j][h];
			}
		}
		verifica();
	}
}
int main()
{
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d %d",&n,&m);
	for (int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&x[i][j]);
			l[i]+=x[i][j];
			c[j]+=x[i][j];
			s+=x[i][j];
		}
	submultimi(n);
	printf("%ld",s);
	fclose(stdout);
	return 0;
}