Cod sursa(job #2457087)

Utilizator DanDumitrescudarkeagle DanDumitrescu Data 16 septembrie 2019 16:58:18
Problema Jocul Flip Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include<cstdio>
#define nmax 20
using namespace std;
FILE * f=fopen("flip.in","r");
FILE * g=fopen("flip.out","w");
int n,m,a[nmax][nmax],max1;
void citire( )
{ int i,j;
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fscanf(f,"%d",&a[i][j]);
        }
    }
}
int v[nmax];
int suma( )
{ int i,j,s=0;
for(i=1;i<=n;i++)
{
    for(j=1;j<=m;j++)
    {
        s=s+a[i][j];
    }
}
    return s;
}
void linie(int k)
{
    for(int i=1;i<=m;i++)
        a[k][i]=a[k][i]*(-1);
}
void coloana (int k)
{
 for(int i=1;i<=n;i++)
        a[i][k]=a[i][k]*(-1);
}
void afisare( )
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(v[i]==1)
            linie(i);
    }


}
int b[nmax];
void bk1(int k)
{
    int i,r,h;
    for(i=0;i<=1;i++)
    { b[k]=i;

    if(k==m)
    {  for( h=1;h<=m;h++)
  {

   if(b[h]==1)
    coloana(h);
  }
         r=suma( );
        if(r>max1)
            max1=r;
             for( h=1;h<=m;h++)
  {

   if(b[h]==1)
    coloana(h);
  }
    }
    else
        bk1(k+1);


    }
}
void bk(int k)
{
    int i,h;
    for(i=0;i<=1;i++)
    { v[k]=i;

    if(k==n)
  { for( h=1;h<=n;h++)
  {

   if(v[h]==1)
    linie(h);
  }
      bk1(1);
      for( h=1;h<=n;h++)
  {

   if(v[h]==1)
    linie(h);
  }

  }
    else
        bk(k+1);


    }
}


int main()
{ int i;
    citire( );
    bk(1);
 fprintf(g,"%d",max1);
        return 0;
}