Cod sursa(job #1727989)

Utilizator RG1999one shot RG1999 Data 12 iulie 2016 00:00:34
Problema Jocul Flip Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int i,j,n,m,pas,ok,nr,s,a[17][17],z,k,pow2;
int sum,s1,s2,max1;
#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;
    citeste(n);
    citeste(m);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
           {
               citeste(a[i][j]);
               max1+=a[i][j];
           }
     pow2=1<<m;
     for(k=1;k<=pow2;k++)
     {
         sum=0;
         for(i=1;i<=n;i++)
            {
                s1=0;
                s2=0;
                for(j=1;j<=m;j++)
         {
             if((1<<j)&k)
             z=a[i][j];
             else
                z=-a[i][j];
             if(z<0)
                s1-=z;
             else
                s2+=z;

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