Cod sursa(job #2239434)

Utilizator AltairGiurgiu Florin Altair Data 10 septembrie 2018 19:12:51
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>

#include <fstream>

using namespace std;

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

int c[50][50], n, m, val_max, st[101], k, as, st2[100], k2, as2;

int _suma (int c[][50], int dim_ln, int dim_cl)
{
    int sum = 0, d[50][50];

    for( int a=1; a<=dim_ln; ++a)
        for( int b=1; b<=dim_cl; ++b)
            d[a][b] = c[a][b];

    for( int a=1; a<=dim_ln; ++a)
        if( st[a] == -1 )
            for( int b=1; b<=dim_cl; ++b)
                d[a][b] *= -1;

    for( int a=1; a<=dim_cl; ++a)
        if( st2[a] == -1 )
            for( int b=1; b<=dim_ln; ++b)
                d[b][a] *= -1;

    for(int a=1; a<=dim_ln; ++a)
        for(int b=1; b<=dim_cl; ++b)
            sum += d[a][b];
    return sum;
}

void _stage_1 ()
{
    in >> n;
    in >> m;

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            in >> c[i][j];
        }
    }
}

int _succesor (int st[], int lim, int indice)
{
    if( indice <= lim && st[indice] > -1 )
    {
        st[indice] -= 2;
        return 1;
    }
    return 0;
}

void _back_2 ()
{
    k2 = 1;
    st2[k2] = 3;

    while( k2 )
    {
        do{
            as2 = _succesor(st2,m,k2);
        }while( as2 && !1 );

        if( as2 )
            if( k2 == m )
            {
                if( _suma(c,n,m) > val_max )
                    val_max = _suma(c,n,m);
            }
            else
                st2[++k2] = 3;
        else
            --k2;
    }
}

void _back_1 ()
{
    val_max = 0;
    if( _suma(c,n,m) > val_max )
        val_max = _suma(c,n,m);

    k = 1;
    st[k] = 3;

    while( k )
    {
        do{
            as = _succesor(st,n,k);
        }while( as && !1 );

        if( as )
            if( k == n )
                _back_2();
            else
                st[++k] = 3;
        else
            --k;
    }
}

int main()
{
    _stage_1 ();

    _back_1 ();

    out << val_max;

    in.close();
    out.close();
    return 0;
}