Cod sursa(job #17288)

Utilizator cypryCiprian Oprisa cypry Data 15 februarie 2007 16:45:44
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <memory.h>
#define NMAX 100


int t[NMAX][NMAX], n, m, v[1000], h = 0, s = -30000;


void read()
{
int i, j;


scanf(  "%d %d\n", &n, &m  );


for(  i = 0; i < n; ++i  )
    {
      for(  j = 0; j < m; ++j  )
	  {
	    scanf(  "%d ", &t[i][j]  );
	  }
      scanf(  "\n"  );
    }
}



void writesteps()
{
int i;

for(  i = 0; i < n; ++i  )
    printf(  "%d ", v[i]  );
printf(  "\n"  );
}



void max()
{
int i, j, col[NMAX], invers[NMAX], sform = 0;



memset(  col, 0, sizeof(col)  );
memset(  invers, 0, sizeof(invers)  );



for(  i = 0; i < n; ++i  )
    {
      for(  j = 0; j < m; ++j  )
	  {
	    col[j] += ( v[i]*t[i][j] );
	    invers[j] += ( (-1)*v[i]*t[i][j] );
	  }
    }

for(  i = 0; i < m; ++i  )
    {
      if(  col[i] > invers[i]  )
	 sform += col[i];
      else
	 sform += invers[i];
    }

if(  sform > s  )
   s = sform;

}





void back(  int step  )
{


if(  step == n   )
   {
     max();
     //writesteps();
   }
else
   {
     v[step++] = -1;
     back(  step  );
     --step;

     v[step++] = 1;
     back(  step  );
     --step;
   }
}



int main()
{
freopen(  "flip.in", "r", stdin  );
freopen(  "flip.out", "w", stdout  );


read();


back(  0  );


printf(  "%d\n", s  );

fclose(  stdin  );
fclose(  stdout  );

return 0;
}