Cod sursa(job #91788)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 13 octombrie 2007 14:35:45
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#include<math.h>
long a[16][16],n,m,max,sir[16][16];
void citire (){
  freopen ("flip.in","r",stdin);
  scanf ("%ld", &n);
  scanf ("%ld", &m);
     for (int i=0;i<n;i++)
	for (int j=0;j<m;j++)
	     scanf("%ld",&a[i][j]);
  fclose(stdin);
}
long sum (int l,int c){
long S=0;
 for (int i=0;i<16;i++){
 long nou=l|(1<<i);
      if (l==nou)
	 for (int ii=0;ii<m;ii++)
	     a[i][ii]*=-1;}

 for (int j=0;j<16;j++) {
  long nou=c|(1<<j);
     if (c==nou)
	for (int jj=0;jj<n;jj++)
	    a[jj][j]*=-1;}
for (int o=0;o<n;o++)
   for (int p=0;p<m;p++)
       S+=a[o][p];
return S;

}
void egalitate(){
  for (int i=0;i<n;i++)
     for (int j=0;j<m;j++)
	 a[i][j]=sir[i][j];}
void suma (){
long S1=0;
for (int ii=0;ii<n;ii++)
  for (int jj=0;jj<m;jj++)
       max+=a[ii][jj];

for (int i=0;i<pow(2,n);i++)
   for (int j=0;j<pow(2,m);j++){
	   S1=sum(i,j);
	   egalitate();
	if (S1>max)
	   max=S1;
   }
}

int main(){
    freopen("flip.out","w",stdout);
    citire();
    for (int i=0;i<n;i++)
       for  (int j=0;j<m;j++)
	   sir[i][j]=a[i][j];
       suma();
       printf("%ld",max);
       printf("\n");
       fclose(stdout);
    return 0;

}