Cod sursa(job #3353058)

Utilizator EricDimiCismaru Eric-Dimitrie EricDimi Data 4 mai 2026 09:35:51
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>

using namespace std;

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

const int DMAX = 16;

int mat[DMAX + 1][DMAX + 1],
    cand[DMAX + 1][DMAX + 1];
int n, m;

void ReadMatrix()
{
    f >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            f >> mat[i][j];
}

void FlipRow(int row)
{
    for(int j = 1; j <= m; j++)
        cand[row][j] *= (-1);
}

int GetMaxSum()
{
    int sum = 0;
    for(int j = 1; j <= m; j++)
    {
        int sumCol = 0;
        for(int i = 1; i <= n; i++)
            sumCol += cand[i][j];
        if(sumCol < 0)
            sumCol *= (-1);
        sum += sumCol;
    }
    return sum;
}

void GenSubsets()
{
    int sumMax = 0;
    for(int mask = 0; mask < (1 << n); mask++)
    {
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= m; j++)
                cand[i][j] = mat[i][j];
        for(int i = 1; i <= n; i++)
            if(mask & (1 << (i - 1)))
                FlipRow(i);
        int sum = GetMaxSum();
        if(sum > sumMax)
            sumMax = sum;
    }
    g << sumMax << '\n';
}

int main()
{
    ReadMatrix();
    GenSubsets();
    f.close();
    g.close();
    return 0;
}