Cod sursa(job #1888104)

Utilizator delia_ioanaCeapa Delia Ioana delia_ioana Data 21 februarie 2017 22:13:53
Problema Text Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

int max_sum = 0;

void flipColumns(vector<vector<int> > &matrix) {
    int new_sum = 0;

    for (int j = 0; j < matrix[0].size(); j ++) {
        int neg_sum = 0, poz_sum = 0;

        for (int i = 0; i < matrix.size(); i ++) {
            if (matrix[i][j] < 0) {
                neg_sum -= matrix[i][j];
            } else {
                poz_sum += matrix[i][j];
            }
        }

        if (neg_sum > poz_sum) {
            new_sum += neg_sum - poz_sum;
        } else {
            new_sum += poz_sum - neg_sum;
        }
    }

    max_sum = max(max_sum, new_sum);
}

void flipLines(vector<vector<int> > &matrix, int k, bool sign) {
    if (k == matrix.size()) {
        flipColumns(matrix);
        return;
    }

    for (int i = 0; i < matrix[0].size(); i ++) {
        matrix[k][i] *= -1;
    }

    flipLines(matrix, k + 1, true);

    if (sign)
        flipLines(matrix, k, false);
}

int main() {
    freopen("flip.in", "r", stdin);
    freopen("flip.out", "w", stdout);

    int n, m;

    scanf("%d %d", &n, &m);

    vector<vector<int> > matrix(n, vector<int>(m));

    for (int i = 0; i < n; i ++) {
        for (int j = 0; j < m; j ++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    flipLines(matrix, 0, true);

    printf("%d\n", max_sum);

    return 0;
}