Cod sursa(job #3210214)

Utilizator ForitaroFurcuta Florin Foritaro Data 5 martie 2024 14:49:50
Problema Jocul Flip Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.62 kb
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

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

int v[20][20], n = 1, m = 1, tot, sum_max, S = 0, Sc;
int op[40];


void Back(int k)
{
    if(k == tot + 1)
    {

        Sc = 0;


        for(int i = 1; i <= n; i ++)
        {
            for(int j = 1; j <= m; j ++)
            {
                Sc = Sc + (op[i] * op[n + j] * v[i][j]);

                //cout << Sc << " i: " << i << " j: " << j << "\n";
            }

        }

        //cout << "==============\n";

        if(Sc > sum_max)
        {
            sum_max = Sc;
        }


/*
        for(int p = 1; p <= n; p ++)
        {
            Sc = Sc + (op[p] * v[p][0]);

            if(op[p] == -1)
            {
                Sc = Sc + 12 * (op[p] * v[p][0]);
            }
        }

        for(int p = n + 1; p <= tot; p ++)
        {
            Sc = Sc + (op[p] * v[0][p - n]);

            if(op[p] == -1)
            {
                Sc = Sc + 12 * (op[p] * v[p][0]);
            }
        }


        if((op[3] == -1) && (op[7] == -1))
        {
            //cout << Sc << " " << sum_max << "\n";
        }


        if(Sc > sum_max)
        {
            //cout << Sc << " - " << sum_max << "\n";

            sum_max = Sc;
        }
*/

    }
    else
    {
        for(int i = -1; i <= 1; i += 2)
        {
            op[k] = i;

            Back(k + 1);
        }
    }


}




int main()
{
    int i, j;

    f >> n >> m;

    tot = n + m;

    for(i = 1; i <= n; i ++)
    {
        for(j = 1; j <= m; j ++)
        {
            f >> v[i][j];

            v[0][j] += v[i][j];
            v[i][0] += v[i][j];
        }
    }


    for(i = 1; i <= n; i ++)
    {
        S += v[i][0];
    }

    for(j = 1; j <= n; j ++)
    {
        S += v[0][j];
    }


    sum_max = S / 2;

    Back(1);

/*
    for(i = 1; i <= tot; i ++)
    {
        S = max(S, max((S - 2 * v[i][0]), max((S - 2 * v[0][j]), (S - 2 * v[i][0] - 2 * v[0][j]))));
    }

    S - 2 * v[i][0]
    S - 2 * v[0][j]
    S - 2 * v[i][0] - 2 * v[0][j]
*/
/*
cout << sum_max;
    for(i = 0; i <= n; i ++)
    {
        for(j = 0; j <= m; j ++)
        {
            g << setw(3) << v[i][j] << " ";
        }

        g << "\n";
    }
*/

    g << sum_max;

    return 0;
}


/*
        for(int p = 1; p <= n; p ++)
        {
            for(int u = n + 1; u <= tot; u ++)
            {
                if()

                Sc = Sc + (op[p] * v[p - n][p - n]);
            }
        }
*/