Cod sursa(job #1829216)

Utilizator netfreeAndrei Muntean netfree Data 14 decembrie 2016 16:37:12
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>

using namespace std;

int rand[20],init_rand[20];
int col[20],init_col[20];

int x[20][20];

vector <int> z;

int what_to_flip[20];
int rezultat;

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


    int n_i,n_j;

    fin>>n_i>>n_j;

    for(int i=1;i<=n_i;i++){

        for(int j=1;j<=n_j;j++){
            fin>>x[i][j];
            init_rand[i]+=x[i][j];
            init_col[j]+=x[i][j];
        }

    }


    int limita=pow(2,n_j)-1;

    for(int mask=0;mask<=limita;mask++){
        int clona = mask;
        int nrtaiat=1;
        int sum_test;

        while(clona != 0){



            sum_test=0;

            if(clona%2==1){

                what_to_flip[nrtaiat]=1;
            }else{
                what_to_flip[nrtaiat]=0;

            }

            nrtaiat++;
            clona/=2;
        }

        /// aici incepe distractia

//        for(int q=1;q<=16;q++){
//            if(what_to_flip[q]==1)
//                sum-=init_col[q];
//            else
//                sum+=init_col[q];
//        }

        int sum=0;

        for(int q=1;q<=n_i;q++){
            int sum_rand=0;

            for(int w=1; w<=n_j; w++){
                if(what_to_flip[w]==1)
                    sum_rand-=x[q][w];
                else
                    sum_rand+=x[q][w];
            }

            if(sum_rand>0)
                sum+=sum_rand;
            else
                sum-=sum_rand;
        }


        rezultat=max(sum,rezultat);

        nrtaiat=1;
    }




    for(int cpy=1;cpy<=17;++cpy){
        col[cpy]=init_col[cpy];
        rand[cpy]=init_rand[cpy];
    }


    fout<<rezultat;

    return 0;
}

///pt flip pe coloane , doar modific semnul la col
///pt flip pe randuri