Cod sursa(job #1727974)

Utilizator RG1999one shot RG1999 Data 11 iulie 2016 23:38:53
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <cstdio>

using namespace std;
int i,j,n,m,pas,ok,nr,s,max1,a[17][17],z,k,sum,s1,s2,pow,pow2,v[17];
#define DIM 10000
char buff[DIM];
int poz=0;

void citeste(int &numar)
{
     numar = 0;
     char semn='+';
     while (buff[poz] < '0' || buff[poz] > '9')
     {
          semn = buff[poz];
          if (++poz == DIM)
               fread(buff,1,DIM,stdin),poz=0;
     }
     while ('0'<=buff[poz] && buff[poz]<='9')
     {
          numar = numar*10 + buff[poz] - '0';
          if (++poz == DIM)
               fread(buff,1,DIM,stdin),poz=0;
     }
     if (semn == '-')
          numar = -numar;
}
int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    pas=1;
    nr=1;
    max1=-999999;
    citeste(n);
    citeste(m);
        for(i=1;i<=n;i++)
        v[i]=1<<i;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
           citeste(a[i][j]);
     pow=1<<n;
     for(k=1;k<=pow;k++)
     {
         sum=0;
         for(j=1;j<=m;j++)
            {
                s1=0;
                s2=0;
                pow=2;
                for(i=1;i<=n;i++)
         {
             if((v[i])&k)
             z=a[i][j];
             else
                z=-a[i][j];
             if(z<0)
                s1+=z;
             else
                s2+=z;

         }
              if(-s1>s2)
              {
                  sum+=(-s1);
                  sum-=s2;
              }
              else
              {
                  sum+=s2;
                  sum+=s1;
              }
        }
        if(sum>max1)
            max1=sum;
     }
     printf("%d",max1);
    return 0;
}