Cod sursa(job #2007322)

Utilizator joy333Steluta Talpau joy333 Data 2 august 2017 15:11:18
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

ifstream fin("Flip.in");
ofstream fout("Flip.out");
class solution{

    vector<int>aux;
    vector<vector<int>>m;
    int suma=0;

   /* void afisare(vector<int>&a){
        for(auto it:a){
            cout<<it<<" ";
        }
        cout<<"\n";
    }*/
    int calculeaza_suma(vector<vector<int>> &mm){
        int s=0;
        for(int i=0;i<mm.size();i++){
            for(int j=0; j<mm[0].size();j++){
                s+=mm[i][j];
            }
        }
        return s;
    }
    void genereaza_matrice(vector<vector<int>> mm){

        for(int i=0; i<mm.size();i++){
            if(aux[i]==1){
                for(int j=0; j<mm[0].size();j++){
                    mm[i][j]=mm[i][j]*(-1);
                }
            }
        }
        for(int i=0; i<aux.size()-mm.size();i++){
            if(aux[i+m.size()]==1){
                for(int j=0; j<mm.size();j++){
                    mm[j][i]=mm[j][i]*(-1);
                }
            }
        }
        update_suma(mm);

    }

    void update_suma(vector<vector<int>>&mm){
        int k=calculeaza_suma(mm);
        if(k>suma){
            suma=k;
        }
        return;
    }

public:
    int get_suma(){
        return suma;
    }
    int citeste_m(){

        int linii, coloane,nr;
        fin>>linii>>coloane;
        m.resize(linii);
        for(int i=0; i<linii;i++){
            for(int j=0; j<coloane;j++){
                    fin>>nr;
                    m[i].push_back(nr);
            }

        }
        return linii+coloane;


    }
    void genereaza_combinatii(int poz, int nr){
        if(poz==nr){
            genereaza_matrice(m);
            return;
        }
        aux.push_back(0);
        poz+=1;
        genereaza_combinatii(poz,nr);
        aux.pop_back();
        poz-=1;
        aux.push_back(1);
        poz+=1;
        genereaza_combinatii(poz,nr);
        poz-=1;
        aux.pop_back();

    }


};

int main()
{
    solution s;
    int nr=s.citeste_m();
    s.genereaza_combinatii(0,nr);
    fout<<s.get_suma();

    return 0;
}