Cod sursa(job #1040598)

Utilizator morlockRadu Tatomir morlock Data 24 noiembrie 2013 18:13:01
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#define nmax 20
using namespace std;

ifstream in("flip.in");
ofstream out("flip.out");

int N, M;
long a[nmax][nmax], L[nmax], C[nmax];

void flipLinie(int x)
{
    L[x] *= -1;
    for ( int i=1; i<=M; ++i )
        C[i] += (-2) * a[x][i];
}

void flipColoana(int x)
{
    C[x] *= -1;
    for ( int i=1; i<=N; ++i )
        L[i] += (-2) * a[i][x];
}

int main()
{
    in >> N >> M;

    long s = 0, smax;

    for ( int i=1; i<=N; ++i )
        for ( int j=1; j<=M; ++j )
        {
            in >> a[i][j];
            L[i] += a[i][j];
            C[j] += a[i][j];
        }

    for ( int i=1; i<=(1 << M); ++i )
    {
        s = 0;
    for ( int i=1; i<=N; ++i )
        if ( L[i] < 0 )
            flipLinie(i);

    for ( int i=1; i<=M; ++i )
        if ( C[i] < 0 )
            flipColoana(i);

    for ( int i=1; i<=N; ++i )
        s += L[i];

        smax = max(s, smax);
    }

    out << s << '\n';
}