Cod sursa(job #1342107)

Utilizator daniel.grosuDaniel Grosu daniel.grosu Data 13 februarie 2015 15:35:12
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
using namespace std;

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

int m,n,smax;
int t[16][16], c[16][16]; // t[n][m]

void reset()
{
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j)
            t[i][j] = c[i][j];
}

int calc(){
    int s=0;
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j)
            s+=t[i][j];
    smax = s>smax?s:smax;
}

void flip(int k){ // k<=n+m
    bool sw; // false - n, true - m;
    if(k>n)k-=n, sw=true;
    if(sw) 
        for(int i=1; i<=n; ++i)
            t[i][k]=-t[i][k];
    else
        for(int i=1; i<=m; ++i)
            t[k][i]=-t[k][i];
}


int main() {
    fin>>n>>m;
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j){
            fin>>t[i][j];
            c[i][j]=t[i][j];
        }
    
    long i,lim=1<<(n+m);
    for(i=1; i<lim; ++i){
        for(int j=1; j<=(n+m); ++j){
            if(i & (1<<(j-1)))
                flip(j);
        }
        calc();
        reset();
    }
    fout<<smax;
    return 0;
}