Cod sursa(job #856012)

Utilizator vendettaSalajan Razvan vendetta Data 15 ianuarie 2013 21:37:43
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <deque>

using namespace std;

ifstream f("flip.in");
ofstream g("flip.out");

#define nmax 17
#define ceva (1<<16)

#define ll long long

int a[nmax][nmax], col[nmax], colXor[nmax];
int n, m;

void citeste(){
    f >> n >> m;
    for(int i=1; i<=n; ++i){
        for(int j=1; j<=m; ++j){
            f >> a[i][j];
        }
    }
}

inline int Xor(int X){
    return -X;
}

void rezolva(){
    int lim = (1<<n); int S = 0;
    for(int conf=0; conf<lim; ++conf){
        for(int j=1; j<=m; ++j) col[j] = 0, colXor[j] = 0;

        for(int k=0; k<n; ++k){
            if ( conf & (1<<k) ){
                for(int j=1; j<=m; ++j){
                    col[j] += Xor(a[k+1][j]);
                    colXor[j] +=(a[k+1][j]);
                }
            }else {
                for(int j=1; j<=m; ++j){
                    col[j] += a[k+1][j];
                    colXor[j] +=Xor(a[k+1][j]);
                }
            }
        }

        int newS = 0;
        for(int j=1; j<=m; ++j){
            newS += max(col[j], colXor[j]);
        }
        S = max(S, newS);
    }

    cout << S << "\n";
    g << S << "\n";
}

int main(){
    citeste();
    rezolva();

    f.close();
    g.close();

    return 0;
}