Cod sursa(job #2199008)

Utilizator GarboteialexGarbotei Alex Garboteialex Data 26 aprilie 2018 11:07:20
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n,m,it;
int sum,maxsum;
bool usedlin[40],usedcol[40],used[40];
int flip[40],matrix[40][40];

void bkt(int poz) {
    if(poz == it + 1) {
        sum = 0;
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                int initial = matrix[i][j];
                if(usedlin[i]) {
                    initial = -initial;
                }
                if(usedcol[j]) {
                   initial = -initial;
                }
                sum += initial;
            }
        }
        maxsum = max(sum,maxsum);
        return;
    } else {
        for(int i = flip[poz - 1]; i <= n + m; i++) {
            if(!used[i]) {
                flip[poz] = i;
                used[i] = true;
                if(i <= n) {
                    usedlin[i] = true;
                } else {
                    usedcol[i - n] = true;
                }
                bkt(poz + 1);
                used[i] = false;
                if(i <= n) {
                    usedlin[i] = false;
                } else {
                    usedcol[i - n] = false;
                }

            }
        }
    }
}

int main() {
    fin >> n >> m;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++) {
            fin >> matrix[i][j];
            maxsum += matrix[i][j];
            sum += matrix[i][j];
        }
    }

    flip[0] = 1;
    for(it = 1; it <= n + m; it++) {
        bkt(1);
    }

    fout << maxsum;
}