Cod sursa(job #615290)

Utilizator edihackpackEdi Pop edihackpack Data 9 octombrie 2011 11:04:32
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include <climits>
int n,m, mat[16][16];
int max = -INT_MAX;
int VerificaSuma()
{
    int suma = 0;
    for(int i =0; i<n;i++)
            for(int j = 0; j<m; j++)
                    suma+=mat[i][j];
    return suma;
}
void InmultesteRand(int rand)
{
     for(int i =0;i<m;i++)
             mat[rand][i]*=(-1);
}
void InmultesteColoana(int coloana)
{
     for(int i =0;i<n;i++)
             mat[i][coloana]*=(-1);
}
void backtr(int x, int t)
{
     int aux[16][16];
     for(int i =0; i<n;i++)
             for(int j =0; j<m; j++)
                     aux[i][j] = mat[i][j];
     if(x == (n+m))
          return;
     if(t)
          if(x<n)
                 InmultesteRand(x);
          else
              InmultesteColoana(x-n);
     if(VerificaSuma()>max)
                           max = VerificaSuma();
     for(int i =0;i<2;i++)
     {
             backtr(x+1, i);
             for(int a = 0; a<n; a++)
                     for(int b = 0; b<m; b++)
                             mat[a][b] = aux[a][b];
     }
}
int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i =0; i<n; i++)
            for(int j =0; j<m; j++)
                    scanf("%d",&mat[i][j]);
    backtr(-1, 0);
    printf("%d",max);
}