Cod sursa(job #1731071)

Utilizator preda.andreiPreda Andrei preda.andrei Data 18 iulie 2016 12:10:57
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>

using namespace std;

#define NMAX 17

int mat[NMAX][NMAX];
int sumaLinie[NMAX];
int sumaColoana[NMAX];

int main()
{
    ifstream fin("flip.in");
    ofstream fout("flip.out");

    int n, m;
    fin >> n >> m;

    int sumaMatrice = 0;

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            fin >> mat[i][j];
            sumaMatrice += mat[i][j];
            sumaLinie[i] += mat[i][j];
            sumaColoana[j] += mat[i][j];
        }
    }

    int sumaMax = sumaMatrice;

    for (int i = 0; i < (1 << n); ++i) {
        int sumaCurenta = sumaMatrice;

        for (int j = 0; j < n; ++j) {
            if (i & (1 << j)) {
                sumaCurenta -= 2 * sumaLinie[n - j];
            }
        }

        for (int j = 1; j <= m; ++j) {
            int sumaAux  = sumaCurenta;

            sumaAux -= 2 * sumaColoana[j];

            for (int x = 0; x < n; ++x) {
                if (i & (1 << x)) {
                    sumaAux += 4 * mat[n - x][j];
                }
            }

            sumaCurenta = max(sumaCurenta, sumaAux);
        }

        sumaMax = max(sumaMax, sumaCurenta);
    }

    fout << sumaMax << "\n";
    return 0;
}