Cod sursa(job #2329541)

Utilizator Cristian25Cristian Stanciu Cristian25 Data 26 ianuarie 2019 21:50:22
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#define len 1001

using namespace std;

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

long long N, M, sol[len], mat[len][len], smax;

long long sum()
{
    long long s = 0;
    for(long long i = 1; i <= N; ++i)
        for(long long j = 1; j <= M; ++j)
            s += mat[i][j];
    return s;
}

void comutare_linie(long long l)
{
    for(long long i = 1; i <= M; ++i)
        mat[l][i] *= -1;
}

void comutare_coloana(long long c)
{
    for(long long i = 1; i <= N; ++i)
        mat[i][c] *= -1;
}

void back(long long k)
{
    for(long long i = sol[k - 1] + 1; i <= N + M; ++i)
    {
        sol[k] = i;
        for(long long i = 1; i <= k; ++i)
            if(sol[i] <= N)
                comutare_linie(sol[i]);
            else comutare_coloana(sol[i] - N);
        smax = max(smax, sum());
        if(k < N + M)
            back(k + 1);
    }
}

int main()
{
    in >> N >> M;
    for(long long i = 1; i <= N; ++i)
        for(long long j = 1; j <= M; ++j)
        {
            in >> mat[i][j];
            smax += mat[i][j];
        }
    back(1);
    out << smax;
    return 0;
}