Cod sursa(job #1169458)

Utilizator andreey_047Andrei Maxim andreey_047 Data 11 aprilie 2014 13:08:52
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 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;
}
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 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)
     ;
    else
    {
        for(i=1;i<=2;i++)
        {
            if(i == 1)
            {
                     Save();
                     Lemon();
                     if(Calc() > summax)
                       summax = Calc();
                     else Unsave();
                    Flip(k+1);
            }
            else if(i==2)
            {
                     Save();
                     Schimbalin(k);
                       Lemon();
                     if(Calc() > summax)
                    summax = Calc();
                    else Unsave();

                    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);
//  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;
}