Cod sursa(job #1169249)

Utilizator andreey_047Andrei Maxim andreey_047 Data 10 aprilie 2014 19:28:49
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <cstdio>
//#include <iostream>
using namespace std;
int a[21][21],n,m,summax;
void Schimbalin(int lin){
    int i;
    for(i = 1; i <= m; i++)
     a[lin][i]*=-1;
}
void Schimbacol(int col){
        int i;
    for(i = 1; i <= n; i++)
     a[i][col]*=-1;
}
int Calc(){
    int sum,i,j;
         sum=0;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      sum+=a[i][j];
  return sum;
}
void Solvecol(int k)
{
    int i;
    if(k == m+1)
     ;
    else
     for(i=1;i<=2;i++)
      {
          if(i==1)
          {
              if(Calc() > summax)
               summax = Calc();
             Solvecol(k+1);
          }
         else
         {
             Schimbacol(k);
              if(Calc() > summax)
               summax = Calc();
              else Schimbacol(k);
             Solvecol(k+1);
         }
      }
}
void Flip(int k)
{
    int i;
    if(k == n+1)
    {
        ;
    }
    else
    {
        for(i=1;i<=2;i++)
        {
            if(i == 1)
            {
                     if(Calc() > summax)
                    summax = Calc();
                    Solvecol(1);
                    Flip(k+1);
            }
            else
            {
                  Schimbalin(k);
                     if(Calc() > summax)
                    summax = Calc();
                    else Schimbalin(k);
                    Solvecol(1);
                    Flip(k+1);

            }
        }

    }
}
int main(){
    int i,j;
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      {scanf("%d",&a[i][j]);summax+=a[i][j];}
    Flip(1);
  //Schimbalin(2);
//  for(i=1;i<=n;i++)
//  {
//      for(j=1;j<=m;j++)
//       fout << a[i][j]<<" ";
//    fout << "\n";
//  }
    printf("%d\n",summax);
    return 0;
}