Cod sursa(job #2501786)

Utilizator sygAndreiIonitaIonita Andrei sygAndreiIonita Data 30 noiembrie 2019 11:02:21
Problema Jocul Flip Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>

using namespace std;

bool lin[17],col[17];
int mat[17][17];

ifstream in ("flip.in");
ofstream out ("flip.out");

int main()
{
    int n,m,i,j,max1=0,c,sum;
    in>>n>>m;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            in>>mat[i][j],max1+=mat[i][j];
    for (i=1;i<=m;i++)
    {
      sum=0;
      for (j=1;j<=n;j++)
        sum+=mat[j][i];
      if (sum<0)
        col[i]=1;
    }
    sum=0;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
           {
              if (col[j]==1)
                sum+=-1*mat[i][j];
              else
                sum+=mat[i][j];
           }
    max1=max(max1,sum);
    for (i=1;i<(1<<n);i++)
    {
      for (j=1;j<=16;j++)
        lin[j]=0;
      for (j=1;j<=n;j++)
        if (i&(1<<(j-1)))
          lin[j]=1;
      for (j=1;j<=16;j++)
        col[j]=0;
      for (c=1;c<=m;c++)
      {
        sum=0;
        for (j=1;j<=n;j++)
        {
          if (lin[j]==1)
            sum+=-1*mat[j][c];
          else
            sum+=mat[j][c];
        }
        if (sum<0)
          col[c]=1;
      }
      sum=0;
      for (j=1;j<=n;j++)
        for (c=1;c<=m;c++)
           {
             if ((lin[j]+col[c])%2)
                sum+=-1*mat[j][c];
             else
                sum+=mat[j][c];
           }
      max1=max(max1,sum);
    }
    out<<max1;
    return 0;
}