Cod sursa(job #1228044)

Utilizator flore77Simion Florentin flore77 Data 12 septembrie 2014 16:32:54
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <fstream>
using namespace std;

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

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

void back (int k)
{
    int s = suma(), i, j;
    if (s > maxim)
    {
        maxim = s;
    }
    for (i = k; i <= n + m; i++)
    {
        if (i <= n)
        {
            int ok = 0;
            for (j = 1; j <= m; j++)
            {
                if (a[i][j] < 0)
                    ok = 1;
                a[i][j] = -a[i][j];
            }
            if (ok)
            {
                back(i + 1);
                for (j = 1; j <= m; j++)
                    a[i][j] = -a[i][j];
            }
        }
        if (i > n)
        {
            int ok = 0;
            for (j = 1; j <= n; j++)
            {
                if (a[j][i - n] < 0)
                    ok = 1;
                a[j][i - n] = -a[j][i - n];
            }
            if (ok)
            {
                back(i + 1);
                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();
    back(1);
    out << maxim;
    out.close();
    return 0;
}