Cod sursa(job #188885)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 10 mai 2008 15:52:07
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<stdio.h>   
long int a[17][17],semn[17],k,p,sl,nl,nc,i,j,sm,sc;
int main()   
{   
    freopen("flip.in","rt",stdin);   
    freopen("flip.out","wt",stdout);   
    scanf("%ld%ld",&nl,&nc);   
    for(i=0;i<nl;i++)   
     for(j=0;j<nc;j++)   
      scanf("%ld",&a[i][j]);   
    k=1<<(nc-1);//k=10...0 cu nc cifre
    for(p=0;p<k;p++)
    // p=sablonul semnelor pt flipul pe coloane
    // primul  sablon p=  0=000..00 cu nc cifre
    // ultimul sablon p=k-1=011..11 cu nc cifre
    { sc=0;//suma pe matrice pt sablon curent
      for(j=0;j<nc;j++)//calculez semnele corespunzator sablonului
       semn[j]=((p>>j)&1)?1:(-1);
      for(i=0;i<nl;i++)//calculez suma neflipata pe fiecare linie
      {sl=0;//initial suma pe linia curenta e 0
       for(j=0;j<nc;j++)//calculul sumei pe linia curenta
        sl+=semn[j]*a[i][j];
       sl=(sl<0)?(-sl):sl;//daca suma liniei e negativa atunci linia
                          //TREBUIE FLIPATA ceea ce schimba semnul sumei
       sc+=sl;//adunam valoarea pozitiva la suma pe toata matricea
      }   
      sm=(sm>sc)?sm:sc;//actualizez solutia finala sm
      //daca am o solutie mai buna cu configuratia curenta de flip vertical
    }   
    printf("%ld\n",sm);   
    return 0;   
}