Cod sursa(job #193297)

Utilizator carloneFMI Carol Plangu carlone Data 3 iunie 2008 15:55:48
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include"stdio.h"
long mx[16][16],n,m,g,h;long SUM_MAX=-2000000000,SUM,st[33];
long sum()
{
     long sum=0;
     for(g=0;g<n*m;g++,sum+=mx[g/n+1][g%m+1]);
     return sum;
}
void flip(int x)
{
     if(x>n){x-=n;for(int g=1;g<=n;g++)mx[g][x]=-mx[g][x];}
     else{for(int g=1;g<=m;g++)mx[x][g]=-mx[x][g];}     
}
int val(int k)
{
    for(int g=1;g<k;g++)if(st[k]==st[g])return 0;
    return 1;
}
void back(int k)
{
     SUM=sum();
     if(SUM>SUM_MAX)SUM_MAX=SUM;
     for(g=1;g<=n+m;g++)
     {
     st[k]=g;
     if(val(k)){flip(g);back(k+1);flip(g);}
     }
}
int main()
{
     freopen("flip.in","r",stdin);freopen("flip.out","w",stdout);
     scanf("%d%d",&n,&m);
     for(g=1;g<=n;g++)for(h=1;h<=m;h++){scanf("%d",&mx[g][h]);}
     back(1);
     printf("%d",SUM_MAX);
     return 0;
}