Cod sursa(job #867189)

Utilizator adytzu2007Adrian Bacircea adytzu2007 Data 29 ianuarie 2013 12:31:07
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int n, m, **mat;
    unsigned int i, j, k, l;
    int max = 0;
    freopen("flip.in", "r", stdin);
    freopen("flip.out", "w", stdout);

    scanf("%d %d", &n, &m);
    mat = malloc((n + 1) * sizeof(*mat));
    for (i = 0; i < n; i ++) {
        mat[i] = malloc((m + 1) * sizeof(*mat[i]));
    }

    for (i = 0; i < n; i ++) {
        for (j = 0; j < m; j ++) {
            scanf("%d", &mat[i][j]);
        }
    }

    for (i = 0; i <= (1 << n) - 1; i ++)
    {
        int sum = 0;
        for (j = 0; j < n; j ++) {
            int flip_line = i & (1 << j) ? 1 : 0;

            for (k = 0; k < m; k ++) {
                int flip_col = 0, col_sum = 0;
                for (l = 0.; l < n; l ++) {
                    if (l == j && flip_line) {
                        col_sum -= mat[l][k];
                    } else {
                        col_sum += mat[l][k];
                    }
                }

                if (col_sum < 0) {
                    flip_col = 1;
                }

                if (flip_col ^ flip_line) {
                    sum -= mat[j][k];
                } else {
                    sum += mat[j][k];
                }
            }
        }

        if (sum > max)
            max = sum;
    }

    printf("%d\n", max);
    return 0;
}