Cod sursa(job #1434142)

Utilizator raducostacheRadu Costache raducostache Data 10 mai 2015 13:25:41
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <stdlib.h>

void bkt_l(long *suma_max, int **m, int k, int *l, int N, int M) {
    int i;
    for(i = 0;i < 2;i++) {
        l[k] = i;
        if(k == N-1) {
            int j, p;
            long suma = 0;
            for(j = 0;j < M;j++) {
                long s = 0;
                for(p = 0;p < N;p++) {
                    if(l[p] == 0)
                        s = s + m[p][j];
                    else
                        s = s - m[p][j];
                }
                if(s < 0)
                    suma = suma - s;
                else
                    suma = suma + s;
            }
            if(suma > *suma_max)
                *suma_max = suma;
        }
        else {
            bkt_l(suma_max, m, k+1, l, N, M);
        }
    }
}

int main() {
    FILE *f1 = fopen("flip.in", "r");
    FILE *f2 = fopen("flip.out", "w");
    int N, M;
    fscanf(f1, "%d%d", &N, &M);

    int i, j;
    int **m = (int **) malloc (N * sizeof(int*));
    for (i = 0; i < N; i++) {
        m[i] = (int *) malloc (M *sizeof(int));
    }

    for(i = 0;i < N;i++)
        for(j = 0;j < M;j++)
            fscanf(f1, "%d", &m[i][j]);

    long suma_max = -1000000;
    int *l = (int *) malloc (N * sizeof(int));
    bkt_l(&suma_max, m, 0, l, N, M);

    fprintf(f2, "%ld\n", suma_max);

    fclose(f1);
    fclose(f2);
    return 0;
}