Cod sursa(job #83868)

Utilizator principeleMatei Constantin principele Data 12 septembrie 2007 01:22:11
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include<stdio.h>

#define Nmax 17
#define Mmax 17

int N, M, A[Nmax][Mmax], SolMax=0, stiva[Nmax];

void flip (int k)
{
     for(int i=1;i<=M;i++)
             A[k][i]=-A[k][i];
}

void back (int k)
{
     if(k==N+1)
     {
             int suma=0;
             for(int i=1;i<=M;i++)
             {
                     int coloana=0;
                     for(int j=1;j<=N;j++)
                     {
                             coloana+=A[j][i];
                     }
                     if(coloana<0)
                                coloana=-coloana;
                     suma+=coloana;
             }
             if(suma>SolMax)
                            SolMax=suma;
     }
     else
     {
         for(int i=0;i<=1;i++)
         {
                 if(i==1)
                 {
                         flip(k);
                         stiva[k]=1;
                         back(k+1);
                         flip(k);
                         stiva[k]=0;
                 }
                 else
                     back(k+1);
         }
     }
}

int main ()
{
    FILE *in = fopen ("flip.in", "rt");
    FILE *out = fopen ("flip.out", "wt");
    
    fscanf (in, "%d %d", &N, &M);
    for(int i=1;i<=N;i++)
            for(int j=1;j<=M;j++)
                    fscanf (in, "%d", &A[i][j]);
    
    back(1);
    
    fprintf (out, "%d", SolMax);
    
    fclose(in);
    fclose(out);
    
    return 0;
}