Cod sursa(job #349690)

Utilizator ChallengeMurtaza Alexandru Challenge Data 21 septembrie 2009 11:31:42
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>

#define abs(a) ((a)>0?(a):-(a))
#define Solve() Back(-1)

long int n, m, mat[17][17], max, lsol[17], csol[17], max2;

void Read()
{
    FILE *f;
	int i=0,j=0;
    f = fopen("flip.in","r");
    fscanf(f,"%ld %ld",&n,&m);
    for(i = 0;i<n;++i)
    {
        for(j=0;j<m;++j)
        {
            fscanf(f,"%ld",&mat[i][j]);
        }
    }
    fclose(f);
	max2 = n>m?n:m;
}

void Write()
{	
    FILE *f;
    f = fopen("flip.out","w");
    fprintf(f,"%ld",max);
    fclose(f);
}

void Back(int k)
{
	if(k==max2)
	{
		long int s=0,l;
		int j;
		for(register int i = 0;i<n;++i)
		{
			for(l = 0, j = 0;j<m;++j)
			{
				l+=mat[i][j]*lsol[i]*csol[j];
			}
			s+=abs(l);
		}
		max = max>s?max:s;
	}
	else
	{
		lsol[k+1] = -1;
		csol[k+1] = -1;
		Back(k+1);
		csol[k+1] = 1;
		lsol[k+1] = 1;
		Back(k+1);
		lsol[k+1] = 1;
		csol[k+1] = -1;
		Back(k+1);
		csol[k+1] = 1;
		lsol[k+1] = -1;
		Back(k+1);
	}
}
	
int main()
{
	Read();
	Solve();
	Write();
	return 0;
}