Cod sursa(job #224613)

Utilizator daniel.dumitranDaniel Dumitran daniel.dumitran Data 30 noiembrie 2008 05:46:49
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 16

int mat[MAXN][MAXN];
int m, n, k;

int best = 0;

void flip(int row) {
  for (int i = 0; i < n; ++i)
    mat[row][i] *= -1;
}

void back() {
  if (k == m) {
    int sum = 0;
    for (int i = 0; i <n; ++i) {
      int col = 0;
      for (int j = 0; j <m; ++j)
        col += mat[j][i];
      sum += abs(col);
    }
    if (sum > best) best = sum;
    return;
  }

  k++; back(); k--;

  flip(k);
  k++; back(); k--;
  flip(k);
}

int main() {
  FILE *f;

  f = fopen("flip.in", "rt");
  fscanf(f, "%d %d", &m, &n);
  for (int i = 0; i < m; ++i)
    for (int j = 0; j < n; ++j)
      fscanf(f, "%d", mat[i] + j);
  fclose(f);

  k = 0;
  back();
  
  f = fopen("flip.out", "wt");
  fprintf(f, "%d\n", best);
  fclose(f);

  return 0;
}