Cod sursa(job #2757645)

Utilizator MoarcascosminMoarcas Cosmin Moarcascosmin Data 5 iunie 2021 16:05:09
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <iostream>
#include <fstream>

using namespace std;

int n, m, a[16][16], semn_linie[16], semn_coloana[16], maxim;

void Citire()
{
    ifstream f("flip.in");

    f >> n >> m;

    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            f >> a[i][j];
}

int Suma()
{
    int s = 0;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            s = s + semn_linie[i] * semn_coloana[j] * a[i][j];
    return s;
}

void BackSemnColoane(int coloana)
{
    if(coloana == m)
    {
        int suma = Suma();
        if(suma > maxim)
            maxim = suma;
    }
    else
    {
        semn_coloana[coloana] = 1;
        BackSemnColoane(coloana + 1);

        int s = 0;

        for(int i = 0; i < n; i++)
            s = s + a[i][coloana];

        if(s < 0)
        {
            semn_coloana[coloana] = -1;
            BackSemnColoane(coloana + 1);
        }
    }
}

void BackSemnLinii(int linie)
{
    if(linie == n)
    {
        BackSemnColoane(0);
    }
    else
    {
        semn_linie[linie] = 1;
        BackSemnLinii(linie + 1);

        int s = 0;

        for(int i = 0; i < m; i++)
            s = s + a[linie][i];

        if(s < 0)
        {
            semn_linie[linie] = -1;
            BackSemnLinii(linie + 1);
        }
    }
}

void Afisare()
{
    ofstream g("flip.out");
    g << maxim;
}

int main()
{
    Citire();
    BackSemnLinii(0);
    Afisare();

    return 0;
}