Cod sursa(job #2514375)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 25 decembrie 2019 16:08:23
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>

#define ll long long

using namespace std;

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

const int N = 20;

int n, m, flip;
int mat[N][N];

bool isColumnFlipped(int col)
{
    return flip & (1 << col);
}

// return the biggest sum flipping just rows
ll bestLineFlip()
{
    ll sum = 0;
    for(int i = 0; i < n; i++)
    {
        ll normalSum = 0;
        ll flipedSum = 0;

        for(int j = 0; j < m; j++)
            if(isColumnFlipped(j))
            {
                normalSum -= mat[i][j];
                flipedSum += mat[i][j];
            }
            else
            {
                normalSum += mat[i][j];
                flipedSum -= mat[i][j];
            }
        sum += max(normalSum, flipedSum);
    }
    return sum;
}

int main()
{
    fin >> n >> m;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            fin >> mat[i][j];

    // any possible flips for columns
    ll sol = 0;
    for(flip = 0; flip < (1 << m); flip++)
    {
        sol = max(sol, bestLineFlip());
    }
    fout << sol;

    return 0;
}