Cod sursa(job #317614)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 24 mai 2009 11:21:02
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<stdio.h>
int a[17][17],i,x,j,n,s,smax,m;
char b[17],c[17];
void verifical()
{ s=0;
    for(i=1;i<=n;i++) 
   { if(b[i-1]!='0')  for(j=1;j<=m;j++) s-=a[i][j];
     else for(j=1;j<=m;j++) s+=a[i][j];
   }       
  if(s>smax)smax=s;
}
void verificac()
{ s=0; 
    for(j=1;j<=m;j++) 
      { if(b[j-1]!='0') for(i=1;i<=n;i++) s-=a[i][j];
        else for(i=1;i<=n;i++) s+=a[i][j];
      }  
  if(s>smax) { smax=s;
               for(i=0;i<m;i++) c[i]=b[i];
               
             }  
}
int gencodl(int i1)
{ if(i1==n) verifical();
  else { b[i1]='0'; gencodl(i1+1);
         b[i1]='1'; gencodl(i1+1);
       }
return 0;
}
int gencodc(int i1)
{ if(i1==m) verificac();
  else { b[i1]='0'; gencodc(i1+1);
         b[i1]='1'; gencodc(i1+1);
       }
return 0;
}
int main()
{ freopen("flip.in","r",stdin);
  freopen("flip.out","w",stdout);
  scanf("%d %d",&n,&m);
  for(i=1;i<=n;i++) 
    for(j=1;j<=m;j++) scanf("%d",&a[i][j]),smax+=a[i][j];
  gencodc(0);
  for(j=1;j<=m;j++) 
  if(c[j-1]!='0') for(i=1;i<=n;i++) a[i][j]=-a[i][j];
  gencodl(0);
  printf("%d\n",smax);
  fclose(stdin);
  fclose(stdout);
  return 0;
}