Cod sursa(job #1169460)

Utilizator andreey_047Andrei Maxim andreey_047 Data 11 aprilie 2014 13:29:11
Problema Jocul Flip Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <cstdio>
//#include <iostream>
using namespace std;
int a[21][21],n,m,s[21][21];
long long summax;
void Schimbalin(int lin){
    int i;
    for(i = 1; i <= m; i++)
     a[lin][i]*=-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 Col(int col){
    int i;
    for(i=1;i<=n;i++)
     a[i][col]*=-1;
}
int Sumcol(int col){
   int i;
   long long sum;
   sum=0;
   for(i=1;i<=n;i++)
    sum+=a[i][col];
  return sum;
}
void Lemon(){
  int i,x,y;
    for(i = 1; i <= m; i++)
     {
        x = Sumcol(i);
        Col(i);
        y = Sumcol(i);
        if(x > y) Col(i);
     }
}
void Save(){
    int i,j;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      s[i][j] = a[i][j];
}
void Unsave(){
    int i,j;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      a[i][j] = s[i][j];
}
void Flip(int k){
    int i;
    if(k == n+1)
    {
        Lemon();
        if(Calc() > summax) summax = Calc();
       // Unsave();
    }
    else
    {
        for(i=1;i<=2;i++)
        {
            //Save();
            if(i == 1)
            {
                    // Lemon();
                    Flip(k+1);
                   // Unsave();

            }
            else if(i == 2)
            {
                     Schimbalin(k);
                     //  Lemon();
                    Flip(k+1);
            }
        }

    }
}
int main(){
    int i,j,q;
    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);
  //Lemon();
//  for(i=1;i<=n;i++)
//  {
//      for(j=1;j<=m;j++)
//       printf("%d ",a[i][j]);
//    printf("\n");
//  }
    printf("%d\n",summax);
    return 0;
}