Cod sursa(job #2535867)

Utilizator matthriscuMatt . matthriscu Data 1 februarie 2020 12:17:55
Problema Jocul Flip Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <math.h>
using namespace std;

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

int n, m, a[17][17], v[33], p, s, i, j, k, maxim;

int sum() {
    int s = 0;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            s += a[i][j];
    return s;
}

int flipl(int x) {
    for(int i = 1; i <= m; ++i)
        a[x][i] *= -1;
}
int flipc(int x) {
    x -= n;
    for(int i = 1; i <= n; ++i)
        a[i][x] *= -1;
}

int abs(int n) {
    if(n < 0)
        return -n;
    return n;
}

void dtb(int x) {
    int i = n+m;
    while(x) {
        v[i] = x % 2;
        x /= 2;
        --i;
    }
}

int main() {
    fin >> n >> m;
    p = pow(2, n+m);
    for(i = 1; i <= n; ++i)
        for(j = 1; j <= m; ++j)
            fin >> a[i][j];

    for(i = 0; i < p; ++i) {
        s = 0;
        dtb(i);
        for(j = 1; j <= n; ++j)
            if(v[j])
                flipl(j);
        for(j; j <= n+m; ++j)
            if(v[j])
                flipc(j);
        if(abs(sum()) > maxim)
            maxim = abs(sum());
        for(j = 1; j <= n; ++j)
            if(v[j])
                flipl(j);
        for(j; j <= n+m; ++j)
            if(v[j])
                flipc(j);
    }
    fout << maxim;
}