Cod sursa(job #1691469)

Utilizator andy1207Cioltan Andrei andy1207 Data 18 aprilie 2016 14:21:31
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<cstdio>
int a[17][17];
int a1[17][17];
int v[17];
int main()
{
 int n,m,i,j,max,cj,f,r,stot,s,min,q,cs,j1,cm,p2;
 freopen("flip.in","r",stdin);
 freopen("flip.out","w",stdout);
 scanf("%d%d",&n,&m);
 stot=0;
 for(i=1;i<=n;i++)
    {
     for(j=1;j<=m;j++)
        {
         scanf("%d",&a[i][j]);
         a1[i][j]=a[i][j];
         stot+=a[i][j];
        }
    }
 max=stot;
 cs=stot;
 cm=m;
 p2=1;
 while(cm!=0)
      {
       p2*=2;
       cm--;
      }
 for(j=1;j<=p2;j++)
    {
     stot=cs;
     cj=j;
     f=0;
     while(cj!=0)
          {
           r=cj%2;
           cj=cj/2;
           v[++f]=r;
          }
     for(q=1;q<=m;q++)
        {
         if(v[q]==1)
            {
             for(i=1;i<=n;i++)
                {
                 a1[i][q]*=-1;
                 stot=stot+2*a1[i][q];
                 //a1[i][q]=a[i][q];
                }
            }
        }
     min=99999;
     for(i=1;i<=n;i++)
        {
         s=0;
         for(j1=1;j1<=m;j1++)
            {
             s+=a1[i][j1];
            }
         if(s<0)
            {
             if(s<min)
                min=s;
            }
        }
     if(min!=99999)
        stot=stot+(min*-1)*2;
     if(stot>max)
        max=stot;
     for(i=1;i<=n;i++)
        {
         for(j1=1;j1<=m;j1++)
            {
             a1[i][j1]=a[i][j1];
            }
        }
    }
 printf("%d\n",max);
return 0;
}