Cod sursa(job #57474)

Utilizator O_NealS. Alex O_Neal Data 2 mai 2007 10:47:29
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<fstream.h>
#include<math.h>

long int x[20][20],tab[20][20],n,s,o,cont,k,m,i,c[20],j,t,l,aux,a,b;

int main();
int write();
int read();
int cigar();
int adunare();

  int main ()

	{
	  read();

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

		   for (j=1; j<=n; j++ )

			  cont+=x[i][j];


	  for ( o=1; o<=pow(2, l); o++)

		  {

			 adunare();

			 cigar();

		  }

	  write();

	  return 0;

	}


   int adunare()

	 {
		t=1;

		for ( i=l; i; i--)

		   { s=c[i]+t;

			 c[i]=s%2;

			 t=s/2;
		   }

	   return 0;

	  }


   int read()

	 {

	   ifstream fin("flip.in");

	   fin>>n>>m;

	   l=n+m;


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

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

			   fin>>x[i][j];

	   fin.close();

	   return 0;

	 }

   int write ()

	  {
		 ofstream fout("flip.out");

		 fout<<cont;

		 fout.close();

		 return 0;

	  }

   int cigar ()

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

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

			 tab[i][j]=x[i][j];


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

		   if( c[i]==1 ) for( j=1; j<=m; j++ ) tab[i][j]*=-1;

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

		   if ( c[i]==1 ) for (j=1 ; j<=n; j++ ) tab[j][i-n]*=-1;

		b=0;

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

			for ( j=1; j<=n; j++ )

				 b+=tab[i][j];

		if(b>cont) cont=b;

		return 0;

	 }