Cod sursa(job #43252)

Utilizator vicenzo_cnuStan Alexandru Dan vicenzo_cnu Data 29 martie 2007 22:24:59
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
int n,m,d[20],d2[20];
long a[20][20],c[20][20],cf[20][20];
long long max,s,s1;
FILE *f,*g;
void citire()
{f=fopen("flip.in","r");
g=fopen("flip.out","w");
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{fscanf(f,"%ld",&a[i][j]);cf[i][j]=a[i][j];
s1+=a[i][j];}
s=max=s1;}


void constituire1(int k)
{s=s1;
if(d[k]==1)
for(int i=1;i<=n;i++)
{c[i][k]=a[i][k]*(-1);
s=s-a[i][k]+c[i][k];}
if(s>max)
{max=s1=s;
for(int i=1;i<=n;i++)
a[i][k]=cf[i][k]=c[i][k];}}

void constituire2(int k)
{s=s1;
if(d2[k]==1)
for(int i=1;i<=m;i++)
{c[k][i]=cf[k][i]*(-1);
s=s-cf[k][i]+c[k][i];}
if(s>max)
{max=s1=s;
for(int i=1;i<=n;i++)
cf[k][i]=a[k][i]=c[k][i];}}

void bkt1(int k)
{for(int i=0;i<=1;i++)
{d[k]=i;
constituire1(k);
if(k<m)
bkt1(k+1);}}

void bkt2(int k)
{for(int i=0;i<=1;i++)
{d2[k]=i;
constituire2(k);
if(k<n)
bkt2(k+1);}}

int main()
{citire();
bkt1(1);
s=s1=max;
bkt2(1);
fprintf(g,"%lld",max);
fclose(f);
fclose(g);
return 0;}