Cod sursa(job #654891)

Utilizator balazstxBalazs Tibor balazstx Data 31 decembrie 2011 11:23:17
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
/* 
 * File:   flip.cpp
 * Author: Rendszergazda
 *
 * Created on 2011. december 31., 10:33
 */

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;


int n, m;
int **sz, **osz, *osszeg;
;

void oszinit(int sor, int i, int max) {
    while (++max < m) {
        //        osz[sor][(i | (1 << max))] = (2 * sz[max]);
        osz[sor][i | 1 << max] = osz[sor][i ] - 2 * sz[sor][max];
        oszinit(sor, i | 1 << max, max);
    }
}

int main(int argc, char** argv) {
    ifstream myfilein("flip.in");
    ofstream myfileout("flip.out");
    myfilein >> n >> m;
    sz = new int*[n];
    osz = new int*[n];
    osszeg = new int[1 << m];
    for (int i = 0; i < 1 << m; i++)
        osszeg[i] = 0;
    for (int i = 0; i < n; i++) {
        sz[i] = new int[m];
        osz[i] = new int[1 << m];
        osz[i][0] = 0;
        for (int j = 0; j < m; j++) {
            myfilein >> sz[i][j];
            osz[i][0] += sz[i][j];
        }
        oszinit(i, 0, -1);
    }

    for (int i = 0; i < n; i++)
        for (int j = 0; j < 1 << m; j++) {
            if (osz[i][j] < 0)osz[i][j] *= -1;
            osszeg[j] += osz[i][j];
        }




//    myfileout << n << ' ' << m << '\n';
//    for (int i = 0; i < n; i++) {
//        myfileout << '\n';
//        for (int j = 0; j < m; j++)
//            myfileout << sz[i][j] << ' ';
//    }
//    for (int i = 0; i < n; i++) {
//        myfileout << '\n';
//        for (int j = 0; j < 1 << m; j++)
//            myfileout << osz[i][j] << ' ';
//    }
//    myfileout << '\n';
//    myfileout << '\n';
//    for (int j = 0; j < 1 << m; j++)
//        myfileout << osszeg[j] << ' ';
    int max = 0;
    for (int j = 0; j < 1 << m; j++)
        if (max < osszeg[j]) max = osszeg[j];
     myfileout  <<max;
    return 0;
}