Cod sursa(job #2686293)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 18 decembrie 2020 20:50:37
Problema Jocul Flip Scor 70
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXNM 16
#define MINVAL -1000000

int mat[MAXNM + 1][MAXNM][MAXNM];

int maxs = MINVAL * MAXNM * MAXNM;

void combinari(int tac, int ac, int n, int m){
  int i, l, c, poz, neg, s;
  s = 0;
  for(c = 0; c < m; c++){
    poz = 0;
    neg = 0;
    for(l = 0; l < n; l++){
      mat[ac][l][c] = mat[tac][l][c];
      if(l == (ac - 1)){
        mat[ac][l][c] *= -1;
      }
      if(mat[ac][l][c] < 0){
        neg += mat[ac][l][c];
      }else{
        poz += mat[ac][l][c];
      }
    }
    neg *= -1;
    if(poz < neg){
      s += neg;
      s -= poz;
    }else{
      s += poz;
      s -= neg;
    }
  }
  if(ac < n){
    for(i = ac; i < n; i++){
      combinari(ac, i + 1, n, m);
    }
  }
  if(maxs < s){
    maxs = s;
  }
}

int main()
{
    FILE *fin, *fout;
    int n, m, l, c;
    fin = fopen("flip.in", "r");
    fscanf(fin, "%d%d", &n, &m);
    for(l = 0; l < n; l++){
      for(c = 0; c < m; c++){
        fscanf(fin, "%d", &mat[0][l][c]);
      }
    }
    fclose(fin);
    combinari(0, 0, n, m);
    fout = fopen("flip.out", "w");
    fprintf(fout, "%d", maxs);
    fclose(fout);
    return 0;
}