Cod sursa(job #167924)

Utilizator AndreyPAndrei Poenaru AndreyP Data 30 martie 2008 13:19:48
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
int n,m,v[20][20],l[20],c[20],l1[20],c1[20],sol[20],smax=0;
void calc()
{
	int i,j,s=0;
	for(i=1; i<=n; i++)
		l1[i]=l[i];
	for(j=1; j<=m; j++)
		c1[j]=c[j];
	for(i=1; i<=m; i++)
	{
		if(sol[i]==-1)
		{
			for(j=1; j<=n; j++)
				l1[j]-=v[j][i]+v[j][i];
		}
	}
	for(i=1; i<=n; i++)
	{
		if(l1[i]<0)
			s-=l1[i];
		else
			s+=l1[i];
	}
	if(s>smax)
		smax=s;
}
void back(int k)
{
	if(k==m+1)
		calc();
	else
	{
		sol[k]=1;
		back(k+1);
		sol[k]=-1;
		back(k+1);
	}
}
int main()
{
	int i,j;
	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",&v[i][j]);
			c[j]+=v[i][j];
			l[i]+=v[i][j];
		}
	}
	for(i=1; i<=n; i++)
		smax+=l[i];
	back(1);
	printf("%d",smax);
	return 0;
}