Cod sursa(job #1213049)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 27 iulie 2014 00:30:53
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;

const int dim = 20, OO = (1<<31)-1;
int N, M, **A, OptimumSum;

void ReadInput() {
    ifstream fi("flip.in");
    if (!fi.is_open()) {
        cout << "File \"flip.in\" could not be found";
        exit(EXIT_FAILURE);
    }

    fi >> N >> M;

    A = new int*[N];
    for (int i = 0; i < N; i++)
        A[i] = new int[M];

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            fi >> A[i][j];
        }
    }

    fi.close();
}

void FindOptimumSum() {
    int ChosenSubsetMask = 0;
    int Sum, ColumnSum;

    OptimumSum = -OO;

    while (ChosenSubsetMask != 1<<N) {

        Sum = 0;

        for (int col = 0; col < M; col++) {

            ColumnSum = 0;

            for (int line = 0; line < N; line++) {

                if ((ChosenSubsetMask >> line) & 1)
                    ColumnSum -= A[line][col];
                else
                    ColumnSum += A[line][col];
            }
            if (ColumnSum < 0)
                Sum -= ColumnSum;
            else
                Sum += ColumnSum;
        }

        OptimumSum = max (OptimumSum, Sum);

        ChosenSubsetMask++;
    }

}

void WriteOutput() {
    ofstream fo("flip.out");

    fo << OptimumSum;

    fo.close();
}

int main() {
    ReadInput();
    FindOptimumSum();
    WriteOutput();
    return 0;
}