Cod sursa(job #210036)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 26 septembrie 2008 10:13:43
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
int m,n,a[17][17],s1[17],s[17],s2[17];
void scol()
{
	for (int i=1; i<=m; ++i)
		for (int j=1; j<=n; ++j)
			s[j]+=a[i][j];
}
void transform(int x)
{
	int i,j;
	for (j=1; j<=n; ++j)
		s2[j]=s[j];
	for (i=0; i<m;++i)
		if ( (1<<i) & x )
			for (j=1; j<=n; ++j)
				s2[j]-=2*a[i+1][j];
}
int calcul(int s2[])
{
	/*
	for (i=1; i<=m; ++i)
		for (j=1; j<=n; ++j)
		if (s2[j]<0)
			{
				s2[j]=(-1)*s2[j];
				s[i]+=s2[j];
			}
		else
			s[i]+=s2[j];
	*/
	int rez=0;
	for(int j=1;j<=n;++j)
		if(s2[j]<0)
			rez-=s2[j];
		else
			rez+=s2[j];
	return rez;
}
int maxim()
{
	int i;
	int max=-300000000;
	int ns=(1<<m)-1,curent;
	for (i=0; i<=ns; ++i)
	{
		transform(i);
		curent=calcul(s2);
		if(curent>max)
			max=curent;
	}
	return max;
}
int main()
{
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d%d",&m,&n);
	for (int i=1; i<=m; ++i)
		for (int j=1;j<=n;++j)
			scanf("%d",&a[i][j]);
	scol();
	printf("%d\n",maxim());
}