Cod sursa(job #3158914)

Utilizator Robilika2007Robert Badea Robilika2007 Data 20 octombrie 2023 01:33:50
Problema Jocul Flip Scor 60
Compilator cpp-64 Status done
Runda HLO 2023 - Cls 10 - Tema 0 Marime 1.53 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define MAX_n 16

int mat[MAX_n + 1][MAX_n + 1];

int vect[] = {0,1,1,-1,1,1};

int v[MAX_n], n, m;
long long sumMax;

void f (int pos)
{
    if(pos == n + 1)
    {
        //schimbam liniile
        for(int i = 1; i <= n; ++i)
        {
            if(v[i] == -1)
            {
                for(int j = 0; j < m; ++j)
                    mat[i - 1][j] *= v[i];
            }
        }


        //verificam suma pe fiecare coloana
        long long sumTotal = 0;
        for(int j = 0; j < m; ++j)
        {
            long long sum = 0;
            for(int i = 0; i < n; ++i)
            {
                sum += mat[i][j];
            }
            if(sum < 0)
            {
                sum *= -1;
            }
            sumTotal += sum;
        }
        if(sumTotal > sumMax)
            sumMax = sumTotal;


            //reverse la schimbare liniilor
        for(int i = 1; i <= n; ++i)
        {
            if(v[i] == -1)
            {
                for(int j = 0; j < m; ++j)
                    mat[i - 1][j] *= v[i];
            }
        }

    } else
    {
        v[pos] = -1;
        f(pos + 1);
        v[pos] = 1;
        f(pos + 1);
    }
}


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

    f(1);

    fout << sumMax;
    return 0;
}