Cod sursa(job #159214)

Utilizator city_guy91alex isip city_guy91 Data 13 martie 2008 23:59:40
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
long a[17][17],b[17][17],i,n,st[17],k,j,m,s,nr,max,as,ev;
int init() { st[k]=-1; return 0;}
int succesor()
{ if(st[k]<1)
   { st[k]++;
     return 1;
   }
  return 0;
}
int valid() { return 1; }
int solutie() { return(k==m); }
int tiparire()
{ s=0; nr=0;
  for(i=1;i<=m;i++) if(st[i]) for(j=1;j<=n;j++) b[j][i]=-a[j][i];
		    else for(j=1;j<=n;j++) b[j][i]=a[j][i];
  for(i=1;i<=n;i++)
   { s=0; for(j=1;j<=m;j++) s+=b[i][j];
     if(s>0) nr+=s; else nr-=s;
   }
  if(nr>max) max=nr;
  return 0;
}
FILE *f,*g;
int main()
{ f=fopen("flip.in","r"); g=fopen("flip.out","w");
  fscanf(f,"%d%d",&n,&m);
  for(i=1;i<=n;i++) for(j=1;j<=m;j++) fscanf(f,"%ld",&a[i][j]);
  k=1;
  while(k!=0)
   { do
      { as=succesor();
	if(as) ev=valid();
      }
     while(!(as&&ev||!as));
     if(as) if(solutie()) tiparire();
	    else { k++;
		   init();
		 }
     else k--;
   }
  fprintf(g,"%ld",max);
  fclose(g);
  return 0;
}