Cod sursa(job #1228081)

Utilizator flore77Simion Florentin flore77 Data 12 septembrie 2014 17:01:24
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
using namespace std;

int a[100][100], maxim = -99999999, n, m, s;

void suma ()
{
    int i, j;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++)
            s += a[i][j];
}

void back (int k)
{
    int i, j;
    if (s > maxim)
    {
        maxim = s;
    }
    for (i = k; i <= n + m; i++)
    {
        if (i <= n)
        {
            int s_linie = 0;
            for (j = 1; j <= m; j++)
            {
                a[i][j] = -a[i][j];
                s_linie += a[i][j];
            }
                s += 2 * s_linie;
                back(i + 1);

            s -= 2 * s_linie;

            for (j = 1; j <= m; j++)
            {
                a[i][j] = -a[i][j];
            }
        }
        if (i > n)
        {
            int s_col = 0;
            for (j = 1; j <= n; j++)
            {
                a[j][i - n] = -a[j][i - n];
                s_col += a[j][i - n];
            }

                s += 2 * s_col;
                back(i + 1);

            s -= 2 * s_col;
            for (j = 1; j <= n; j++)
            {
                a[j][i - n] = -a[j][i - n];
            }
        }
    }
}

int main()
{
    ifstream in("flip.in");
    ofstream out("flip.out");
    in >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            in >> a[i][j];
    in.close();
    suma();
    back(1);
    out << maxim;
    out.close();
    return 0;
}