Cod sursa(job #426392)

Utilizator xacronyxasdfasd asdf ads xacronyx Data 26 martie 2010 20:46:38
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>

const char *fin = "flip.in";
const char *fout = "flip.out";

int mat[20][20];
int m, n;
int max = -1000000;

inline void flipLine(const int l) {
    for(int i = 0; i < m; ++i) {
        mat[l][i] *= -1;
    }
}

inline void flipCol(const int c) {
    for(int i = 0; i < n; ++i) {
        mat[i][c] *= -1;
    }
}

void readData() {
    FILE *f = fopen(fin, "rt");
    fscanf(f, "%d %d", &n, &m);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            fscanf(f, "%d", &mat[i][j]);
        }
    }
}

void greedy() {
    int sum = 0, ps = 0;
    for (int i = 0; i < m; ++i) {
        ps = 0;
        for (int j = 0; j < n; ++j) {
            ps += mat[j][i];
        }
        sum += (ps > 0) ? ps : -ps;
    }
    if (sum > max) {
        max = sum;
    }
}

void back(const int l) {
    if (l == n) {
        greedy();
    } else {
        back(l + 1);
        flipLine(l);
        back(l + 1);
        flipLine(l);
    }
}

void writeData() {
    FILE *f = fopen(fout, "wt");
    fprintf(f, "%d", max);
    fclose(f);
}

int main() {
    readData();
    back(0);
    writeData();
    return 0;
}