Cod sursa(job #466390)

Utilizator biroBiro Alexandru biro Data 26 iunie 2010 15:16:15
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>

#define Nmax 17

int n, m ;
int coloana[Nmax] ;
int a[Nmax][Nmax] ;

int best;

void proceseaza() {
  int sumaOptima = 0 ;

  for ( int i = 1; i <= n; ++i ) {
    int sumaLinie = 0 ;
    for ( int j = 1; j <= m; ++j ) {
      sumaLinie += a[i][j] * coloana[j] ;
    }
    if ( sumaLinie <= 0 )
      sumaOptima -= sumaLinie ;
    else
      sumaOptima += sumaLinie ;
  }
  
  if ( best < sumaOptima )
    best = sumaOptima ;
}

int back(int nivel) {
  if ( nivel > m )
    proceseaza() ;
  else {
    coloana[nivel] = 1 ;
    back(nivel+1) ;
    coloana[nivel] = -1 ;
    back(nivel+1) ;
  }
}

void citeste() {
  FILE *f = fopen ( "flip.in", "r" ) ;

  fscanf ( f, "%d%d", &n, &m ) ;

  for ( int i = 1; i <= n; ++i ) {
    for ( int j = 1; j <= m; ++j ) {
      fscanf ( f, "%d", &a[i][j] ) ;
    }
  }
  
  fclose (f) ;
}

void rezolva() {
  best = -1234567890 ;

  back(1) ;
}

void scrie() {
  FILE *f = fopen ( "flip.out", "w" ) ;
  
  fprintf ( f, "%d\n", best ) ;
  
  fclose(f) ;
}


int main () {

  citeste() ;
  rezolva() ;
  scrie() ;

  return 0 ;
}