Cod sursa(job #1971640)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 20 aprilie 2017 18:56:01
Problema Jocul Flip Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>

#define NMAX 16

int s [ NMAX ] ; /// Sumele pe linii
int mat [ NMAX ] [ NMAX ] ;
int s_c [ NMAX ] ;  /// Sumele pe coloane

int s_max ;

int parc_c (int m, int s_t )  {
  int i ;
  for (i = 1 ; i <= m ; i++ ) {
    if ( s_c[i] < 0 ) {
      s_t += 2 * ( -s_c[i] ) ;
    }
  }
  return s_t ;
}

void back ( int k, int n, int s_t, int m ) {

  int i ;

  if (parc_c(m, s_t ) > s_max )
    s_max = parc_c(m, s_t ) ;

  if (k < n ) {
    for (i = k+1 ; i <= n ; i++ ) {
      if (s[i] < 0 ) {
        back (i, n, s_t + 2 * (-s[i]), m ) ;
      }
    }
  }
}

int main() {

  FILE *fin, *fout ;

  fin = fopen ("flip.in", "r" ) ;
  fout = fopen ("flip.out", "w" ) ;

  int n, i, j, m, sum, s_t ;

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

  s_t = 0 ;
  for (i = 1 ; i <= n ; i++ ) {
    sum = 0 ;
    for (j = 1 ; j <= m ; j++ ) {
      fscanf (fin, "%d", &mat[i][j] ) ;
      sum += mat[i][j] ;
    }
    s[i] = sum ;
    s_t += sum ;
  }

  for (j = 1 ; j <= m ; j++ ) {
    for (i = 1 ; i <= n ; i++ ) {
      s_c[j] += mat[i][j] ;
    }
  }

  back (0, n, s_t, m) ;
  fprintf (fout, "%d", s_max ) ;
  return 0;
}