Cod sursa(job #966142)

Utilizator bDannYdBurileanu Daniel bDannYd Data 25 iunie 2013 13:46:06
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>

long tab[17][17], sum = 0, max = -0xffff;
int v[17];
int n, m;

void flip(int k) {
    int i;

    for(i = 0; i < m; i++)
        tab[k][i] *= -1;
}

void read() {
    FILE *fin;
    int i, j;

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

    fscanf(fin,"%d %d", &n, &m);
    for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
            fscanf(fin, "%d", &tab[i][j]);

    fclose(fin);
}

void compute() {
    int k = 0, i, j, ok;
    long s;
    v[k] = -1;

    while(k > -1) {
        ok = 0;
        while(v[k] < 1 && !ok) {
            v[k]++;
            if(v[k]) flip(k);
                ok=1;
        }
        if(ok)
            if(n - 1 == k){
                sum = 0;
                for(i = 0; i < m; i++) {
                    s = 0;
                    for(j = 0; j <= n;j++)
                        s+=tab[j][i];
                    if(s < 0)
                        sum -= s;
                    else
                        sum+=s;
                }
            if(sum > max)
                max=sum;
            }
            else
                v[++k] = -1;
        else {
            k--;
            if(v[k]) flip(k);
        }
    }
}

void print(){
    FILE *fout;

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

    fprintf(fout,"%d",max);

    fclose(fout);
}

int main()
{
    read();
    compute();
    print();

    return 0;
}