Cod sursa(job #2545711)

Utilizator IancuVladIancu Vlad IancuVlad Data 13 februarie 2020 13:52:34
Problema Jocul Flip Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<iostream>
#include<fstream>
using namespace std;

const int N = 20;
const int M = 20;

int tabla[N][M] = {0};
int n, m;
int s = 0;

void backCol(int j);
int sum();
void flipLine(int i);
void flipCol(int j);

void backLine(int i)
{
    if(i == n){
        backCol(0);
        return;
    }
    
    backLine(i + 1);
    flipLine(i);
    backLine(i + 1);
    flipLine(i);
}

void backCol(int j)
{
   if(j == m)
   { 
    int suma = sum();
    if(suma > s)
        s = suma;
    return;
   }

   backCol(j + 1);
   flipCol(j);
   backCol(j + 1);
   flipCol(j);
}

int sum()
{
    int suma = 0;
    for (int i = 0; i < n;i++)
        for (int j = 0; j < m;j++)
            suma += tabla[i][j];
    return suma;
}

void flipLine(int i) {
    for (int j = 0; j < m; j++)
        tabla[i][j] *= -1;
}

void flipCol(int j) {
    for (int i = 0; i < n; i++)
        tabla[i][j] *= -1;
}

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

    fin >> n;
    fin >> m;

    for (int i = 0; i < n;i++)
        for (int j = 0; j < m;j++)
            fin >> tabla[i][j];

    backLine(0);
    fout << s;

    return 0;
}