Cod sursa(job #849701)

Utilizator unincepatorDigi Cazan unincepator Data 7 ianuarie 2013 15:33:00
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
#include<vector>
#include<iostream>
using namespace std;

ofstream fout("flip.out");





void back_gen(vector<bool>& bit_map,int k,int limit,vector<vector<bool> >& results)
{
    if(k == limit+1)
    {
            results.push_back(bit_map);

    }
    else
    {
        bit_map[k] = 0;
        back_gen(bit_map,k+1,limit,results);
        bit_map[k] = 1;
        back_gen(bit_map,k+1,limit,results);


    }
}
int main()
{

    int n,m,i,j,k;
    long max_sum=0,temp;

    ifstream fin("flip.in");
    fin>>n>>m;
    vector<vector<long> >table(n,vector<long>(m,0)),ctable;
    vector<bool> bit_map (n+m);
    vector<vector<bool> > configs;
    for(i=0;i<n;++i)
        for(j=0;j<m;++j)
                fin>>table[i][j];
    fin.close();
    back_gen(bit_map,0,n+m,configs);
    for( k=0;k<configs.size();++k )
    {
        bit_map = configs[k];
        temp =0;
        ctable = table;
        for(i=0;i<n;++i)
            if(bit_map[i])
                for(j=0;j<m;++j)
                    ctable[i][j]*=-1;
        for(j=n;j<m+n;++j)
            if(bit_map[j])
                for(i=0;i<n;i++)
                    if(!bit_map[i])
                        ctable[i][j-n]*=-1;
        for(i=0;i<n;++i)
            for(j=0;j<m;++j)
                temp += ctable[i][j];
        if(temp>max_sum)
            max_sum = temp;
    }
    fout<<max_sum;
    return 0;
}