Cod sursa(job #2477550)

Utilizator FlaviusFeteanFetean Flavius FlaviusFetean Data 20 octombrie 2019 16:55:39
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

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

int M, N, A[20][20], B[20][20], pow2N;
long long maxi;

void flip(int x)
{
    int i, j, flipper;
    for(i = 0; i < N; i++)
    {
        if((1<<i) & x) flipper = -1;
        else flipper = 1;
        for(j = 1; j <= M; j++)
            B[i + 1][j] = A[i + 1][j]*flipper;
    }
}

int bestValCrt()
{
    int i, j;
    long long sum = 0, sumCol;
    for(j = 1; j <= M; j++)
    {
        sumCol = 0;
        for(i = 1; i <= N; i++)
            sumCol += B[i][j];
        if(sumCol < 0) sum -= sumCol;
        else sum += sumCol;
    }
    return sum;
}

int main()
{
    int i, j;
    long long sum;
    fin >> N >> M;
    for(i = 1; i <= N; i++) for(j = 1; j<= M; j++)
            fin >> A[i][j], maxi += A[i][j];

    pow2N = 1;
    for(i = 1; i <= N; i++) pow2N *= 2;
    for(i = 1; i < pow2N; i++)
    {
        flip(i);
        sum = bestValCrt();
        if(sum > maxi) maxi = sum;
    }

    fout << maxi;

    return 0;
}