Cod sursa(job #926129)

Utilizator shiftcrissCeica Cristian shiftcriss Data 24 martie 2013 23:03:07
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdlib.h>
#include<stdio.h>

int n,m,a[17][17],i,j,x[257];
long sum,maxi;

int suma()
{	
	long x = 0;
	for(int k = 0; k < n; k++)
		for(int l = 0; l < m; l++) 
			x += a[k][l];
			 
	return x;
}

void operare()
{
	
	printf("\n");for(i = 1; i <= n; i++) 
		 if(x[i]==1) 
			 for(j = 0; j < m; j++) 
				 a[i-1][j]=a[i-1][j]*-1;
	for(i = n+1; i <= n+m; i++) 
         if(x[i]==1) 
			 for(j = 0; j < n; j++) 
				 a[j][i-n-1]=a[j][i-n-1]*-1;
	if(suma() >= maxi)
		maxi=suma();
	
	for(i = 1; i <= n; i++) 
		 if(x[i]==1) 
			 for(j = 0; j < m; j++) 
				 a[i-1][j]=a[i-1][j]*-1;
	for(i = n+1; i <= n+m; i++) 
         if(x[i]==1) 
			 for(j = 0; j < n; j++) 
				 a[j][i-n-1]=a[j][i-n-1]*-1;
}

void bk(int k)
{  int i;
   for(i = 0; i <= 1; i++)
      { x[k] = i;
        if (k == n+m) operare();
           else bk(k+1);
      }
}

int main()
{	
	FILE*in,*out;
	in = fopen("flip.in","r");
	out = fopen("flip.out","w");
	fscanf(in,"%d",&n);
	fscanf(in,"%d",&m);
	for(i = 0; i < n; i++)
		for(j = 0; j < m; j++) 
			fscanf(in,"%d",&a[i][j]);
	bk(1);
		
			
	fprintf(out,"%d",maxi);
	fclose(in);
	fclose(out);
	return 0;
}