Cod sursa(job #439205)

Utilizator SpiderManSimoiu Robert SpiderMan Data 11 aprilie 2010 14:03:01
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <cstdio>
using namespace std;

#define oo 0x3f3f3f3
#define hg 8192

int flip[17][17];
int M, N, poz;
int MAX = -oo;
char ch[hg];

inline void cit (int &x)
{
    int semn = 1;
    x = 0;
    if (ch[0]=='\0') fread (ch, 1, hg, stdin);
    else while ((ch[poz] < '0' || ch[poz] > '9') && (ch[poz]!='-'))
            if (++poz == hg)
                fread (ch, 1, hg, stdin), poz = 0;

    if (ch[poz] == '-')
    {
        semn = -1;
        if (++poz == hg)
                fread (ch, 1, hg, stdin), poz = 0;
    }
    while (ch[poz] >= '0' && ch[poz] <= '9')
    {
        x = x * 10 + ch[poz] - '0';
        if (++poz == hg)
            fread (ch, 1, hg, stdin), poz = 0;
    }
    x *= semn;
}
inline void LN(const int l)
{
    for (int i = 0; i < M; i++)
        flip[l][i] = -flip[l][i];
}

void read()
{
    cit(N), cit(M);
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            cit(flip[i][j]);
}

void solve()
{
    int suma = 0,  sumi = 0;

    for (int i = 0; i < M; i++, sumi = 0)
    {
        for (int j = 0; j < N; j++)
            sumi += flip[j][i];

        suma += sumi > 0 ? sumi : -sumi;
    }

    if (suma > MAX)
        MAX = suma;
}

void back(const int l)
{
    if (l == N) solve() ;
    else
        for (int i = 1; i <= 2; i++)
            back(l + 1), LN(l);

}

void write()
{
    printf("%d",MAX);
}

int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);

    read(), back(0), write();

    return 0;
}