Cod sursa(job #1228051)

Utilizator flore77Simion Florentin flore77 Data 12 septembrie 2014 16:39:32
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 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 s = 0;
            for (j = 1; j <= m; j++)
            {
                s += a[i][j];
                a[i][j] = -a[i][j];
            }
            if (s < 0)
            {
                back(k + 1);
            }
            for (j = 1; j <= m; j++)
                    a[i][j] = -a[i][j];
        }
        if (i > n)
        {
            int s = 0;
            for (j = 1; j <= n; j++)
            {
                s += a[j][i - n];
                a[j][i - n] = -a[j][i - n];
            }
            if (s < 0)
            {
                back(k + 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;
}