Cod sursa(job #91852)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 13 octombrie 2007 16:41:31
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 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){
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;}
long P1=0,P2=0;
  for (int j=0;j<m;j++){
  P1=0;
  P2=0;
     for (int iii=0;iii<n;iii++){
	 P1+=a[iii][j];
	 P2+=-a[iii][j];}
   if (P2>P1){
      for (int t=0;t<n;t++)
	  a[t][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;
max=0;
for (int i=0;i<pow(2,n);i++) {
	   S1=sum(i);
	   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;

}