Cod sursa(job #2329540)

Utilizator Cristian25Cristian Stanciu Cristian25 Data 26 ianuarie 2019 21:44:09
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <iostream>
#define len 17

using namespace std;

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

short N, M, sol[len * 2 - 1];
int mat[len][len], smax;

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

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

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

void back(short k)
{
    for(short i = sol[k - 1] + 1; i <= N + M; ++i)
    {
        sol[k] = i;
        for(short 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(short i = 1; i <= N; ++i)
        for(short j = 1; j <= M; ++j)
        {
            in >> mat[i][j];
            smax += mat[i][j];
        }
    back(1);
    out << smax;
    return 0;
}