Cod sursa(job #680253)

Utilizator Roninsabau sabin nicolae cristian Ronin Data 15 februarie 2012 09:41:43
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
int mat[16][16],n,m;
long max=0,vn[16]={0},vm[16]=0;
void fn1(int x,int a)
{	int i;
	if(a) 
	for(i=0;i<n;i++)
		vn[i]-=2*mat[i][x];
}
void fm1(int x,int a)
{	int i;
	if(a) 
	for(i=0;i<m;i++)
		vm[i]-=2*mat[i][x];
}
void f2(int x,int y,int a,int b)
{
	fn1(x,a);fm1(y,b);
	if(x==n&&y==m) 
	{
		int sum=0,i;for(i=0;i<n;i++) sum+=vn[i];for(i=0;i<m;i++) sum+=vm[i];
		if(max<sum) max=sum;
	}
	else
	if(x<n)
	{
		{f2(x+1,y,1,1); fn1(x+1,1);fm1(y,1);}
		{f2(x+1,y,1,0); fn1(x+1,1);fm1(y,0);}
		{f2(x+1,y,0,1); fn1(x+1,0);fm1(y,1);}
		{f2(x+1,y,0,0); fn1(x+1,0);fm1(y,0);}
	}
	else
	if(y<m)
	{
		{f2(x,y+1,1,1); fn1(x,1);fm1(y+1,1);}
		{f2(x,y+1,1,0); fn1(x,1);fm1(y+1,0);}
		{f2(x,y+1,0,1); fn1(x,0);fm1(y+1,1);}
		{f2(x,y+1,0,0); fn1(x,0);fm1(y+1,0);}
	}

}	
int main()
{
	int i,j;
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			scanf("%ld",mat[i][j]);
	f2();
	printf("%ld",max);
	return 0;
}