Cod sursa(job #1490437)

Utilizator DiClauDan Claudiu DiClau Data 23 septembrie 2015 16:06:32
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>
using namespace std;
const int N = 18;
int mat[N][N], n, m, col[N], maxim = -10000000;
FILE *in = fopen ("flip.in", "r"),
    *out = fopen ("flip.out", "w");
void bkt(int poz)
{
    int i, j, c, s = 0;
    for (i = poz; i <= n; i++)
    {
        s = 0;
        for (j = 1; j <= m; j++)
        {
            mat[i][j] *= -1;
            col[j] += mat[i][j] * 2;
        }
        for (j = 1; j <= m; j++)
            if (col[j] < 0)
                for (c = 1; c <= n; c++)
                {
                    mat[c][j] *= -1;
                    col[j] *= -1;
                }
        for (j = 1; j <= n; j++)
            for (c = 1; c <= m; c++)
                s += mat[j][c];
        if (s > maxim)
            maxim = s;
        bkt(poz + 1);/*
                for (j = 1; j <= n; j++)
        {
            for (c = 1; c <= m; c++)
                fprintf (out, "%d", mat[j][c]);
            fprintf (out, "\n");
        }*/
        for (j = 1; j <= m; j++)
        {
            mat[i][j] *= -1;
            col[j] += mat[i][j] * 2;
        }
    }
}
int main ()
{
    fscanf (in, "%d%d", &n, &m);
    int i, j, s = 0;
    for (i = 1; i <= n; i++)
    {
        s = 0;
        for (j = 1; j <= m; j++)
        {
            fscanf (in, "%d", &mat[i][j]);

        }
    }
    for (i = 1; i <= m; i++)
    {
        s = 0;
        for (j = 1; j <= n; j++)
            s += mat[j][i];
        col[i] = s;
    }
    bkt(3);
    fprintf (out, "%d", maxim);
    return 0;
}