Cod sursa(job #3128704)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 10 mai 2023 16:13:16
Problema Jocul Flip Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int MAX_N = 20;

int n, m;
int board[MAX_N][MAX_N];
bool flipX[MAX_N];
bool flipY[MAX_N];
int maxSum;

void HandleInput() {
    fin >> n >> m;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            fin >> board[i][j];
        }
    }
}

void ComputeSum() {
    int sum = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            int x = board[i][j];
            if (flipX[i]) {
                x = -x;
            }
            if (flipY[j]) {
                x = -x;
            }
            sum += x;
        }
    }

    if (sum > maxSum) {
        maxSum = sum;
    }
}

void Backtracking(int idxX, int idxY) {
    ComputeSum();

    for (int i = idxX; i < n; i++) {
        for (int j = idxY; j < m; j++) {
            Backtracking(i + 1, j + 1);

            flipX[i] = true;
            Backtracking(i + 1, j + 1);
            flipX[i] = false;

            flipY[j] = true;
            Backtracking(i + 1, j + 1);
            flipY[j] = false;

            flipX[i] = true;
            flipY[j] = true;
            Backtracking(i + 1, j + 1);
            flipX[i] = false;
            flipY[j] = false;
        }
    }
}

void HandleOutput() {
    fout << maxSum << '\n';
}

int main() {
    HandleInput();
    Backtracking(0, 0);
    HandleOutput();

    return 0;
}