Cod sursa(job #30609)

Utilizator mika17Mihai Alex Ionescu mika17 Data 14 martie 2007 18:49:24
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <string.h>

#define inFile "flip.in"
#define outFile "flip.out"
#define DMAX 16
#define INF 16*16*1000000+1

int c[DMAX],N,M;
long A[DMAX][DMAX],col[DMAX],sol=-INF;
void readData();
void gen(int);
void writeData();
int main()
{
 readData();
 gen(1);  //atentie aici sub[0] mereu = 0 !
 writeData();
 return 0;
}
void readData()
{
 FILE * f = fopen(inFile,"r");
 fscanf(f,"%d %d",&N,&M);
 for(int i=0;i<N; ++i)
  for(int j=0;j<M; ++j)
   {
	fscanf(f,"%ld",&A[i][j]);
	col[j]+=A[i][j];
   }
 fclose(f);
}

void writeData()
{
 FILE * f = fopen(outFile,"w");
 fprintf(f,"%ld",sol);
 fclose(f);
}

void verify();
void gen(int k)
{
 if(k==N) verify();
  else
 for(int i=0;i<2;i++)
  {
   c[k]=i;
   gen(k + 1);
  }
}

void verify()
{
 int i,j;
 long tmp[DMAX],sum=0;
 memcpy(tmp,col,sizeof col);
 for(i = 0 ; i < N ; ++i)
  if(c[i])
   for(j = 0 ; j < M ; ++j)
	{
	 tmp[j]+=2*(-A[i][j]);
	}
 for(j = 0 ; j < M ; ++j)
  {
   if(tmp[j]<0)
	 sum-=tmp[j];
	else
	 sum+=tmp[j];
  }
 if(sum > sol ) sol = sum;
}