Cod sursa(job #75546)

Utilizator alex23alexandru andronache alex23 Data 3 august 2007 11:03:37
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
//#include <conio.h>


int n,m,i,j,a[6][6],max,as,st[40],k,b[6][6];


int Am_Succesor()
{
if (st[k]<1) {st[k]++;
	      return 1;
	      }
       else  return 0;
}

int E_Valid()
{
return 1;
}

int solutie()
{
if (k==n+m) return 1;
     else return 0;
}

void tipar()
{
int s;
s=0;
for (i=1;i<=n;i++)
  if (st[i]==1) for (j=1;j<=m;j++)
		     b[i][j]=-a[i][j];
	  else  for (j=1;j<=m;j++)
		     b[i][j]=a[i][j];
for (i=n+1;i<=n+m;i++)
  if (st[i]==1) for (j=1;j<=n;j++)
		     b[j][i-n]=-a[j][i-n];
for (i=1;i<=n;i++)
   for (j=1;j<=m;j++)
     s+=b[i][j];
if (s>max) max=s;
}

void back()
{
k=1;st[k]=-1;
while (k>0)
  {
   do {}
     while ((as=Am_Succesor()) && (!E_Valid()));
   if (as)
       if (solutie()) tipar();
	     else {k++;st[k]=-1;}
	   else {k--;}
   }
}


int main()
{FILE *fin,*fout;

//clrscr();

fin=fopen("flip.in","r");
fscanf(fin,"%d %d",&n,&m);
for (i=1;i<=n;i++)
   for (j=1;j<=m;j++)
     fscanf(fin,"%d",&a[i][j]);

fclose(fin);
/*
for (i=1;i<=n;i++)
  {for (j=1;j<=m;j++)
    printf("%d ",a[i][j]);
   printf("\n");
   }
  */
max=0;
back();
fout=fopen("flip.out","w");
fprintf(fout,"%d",max);
fclose(fout);

return 0;
}