Cod sursa(job #118883)

Utilizator katakunaCazacu Alexandru katakuna Data 28 decembrie 2007 10:51:54
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
int k,s,max,l,n,m,i,j,k2,l2;
int a[17][17];
int b[17][17];

int v[257][17],t[257][17];

///////////////////////////////////////////////////////////////////////////////////

int main(){
  FILE *f=fopen("flip.in","r");

 fscanf(f,"%d",&n);
 fscanf(f,"%d",&m);

 for(i=1;i<=n;i++){
    for(j=1;j<=m;j++){
    fscanf(f,"%d",&a[i][j]);
    }
 }

fclose(f);
max=0;

///////////////////////////////////////////////////////////////////////////////

for(k=0;k<=(1<<m)-1;k++){

    for(l=m-1;l>=0;l--){

    v[k+1][l+1]=(k>>l)&1;
    }
}

///////


  for(k=0;k<=(1<<n)-1;k++){

    for(l=n-1;l>=0;l--){

    t[k+1][l+1]=(k>>l)&1;
    }
  }
//////////////////////////////////////////////////////////////////////////////////

 for(k=1;k<=(1<<m);k++){

   for(k2=0;k2<=(1<<n)-1;k2++){

	for(i=1;i<=n;i++){

	 if(t[k][i]==1){
	   for(j=1;j<=m;j++)b[i][j]=(-1)*a[i][j];
	 }

	 else
	   for(j=1;j<=m;j++)b[i][j]=a[i][j];

	}


     for(j=1;j<=m;j++){

       if(v[k2][j]==1)
	 for(i=1;i<=n;i++)b[i][j]=(-1)*b[i][j];

       else  for(i=1;i<=n;i++) b[i][j]=b[i][j];

     }

     s=0;
     for(i=1;i<=n;i++){
	for(j=1;j<=m;j++){
	s=s+b[i][j];
	}
     }

    if(s>max){max=s;}

   }

 }

 FILE *g=fopen("flip.out","w");
 fprintf(g,"%d\n",max);
 fclose(g);

return 0;

}