Cod sursa(job #2640130)

Utilizator Anastasia_StefanescuAnastasia Stefanescu Anastasia_Stefanescu Data 5 august 2020 12:13:58
Problema Elimin Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;

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

long long s_col[1001], S, S_max;
int n, m, v[101][1001];

int cif1(int k)
{
    int aux = k;
    int nr1=0;
    do {
        aux &= aux-1;
        nr1++;
    }
    while (aux);
    return nr1;
}

void initializare_s_col()
{
    int i;
    for (i = 0; i< m; i++)
        s_col[i] = 0;
}

int main()
{
    int i, j, l, c, k;
    
    fin >> n >> m >> l >> c;
    
    if(n > m)
    {
        swap(n, m);
        swap(l, c);
        for(j = 0; j < m; ++j)
            for (i = 0; i < n; ++i)
                fin >> v[i][j];
    }
    else
    {
    for(i = 0; i< n; i++)
        for(j = 0; j< m; j++)
            fin >> v[i][j];
    }


    //calculam permutarile posibile
    S_max = 0;
    
    for (k = 1; k < (1 << n); k++)
        if(cif1(k) == l)
        {
            initializare_s_col();
            
            for (i = 0; i< n; i++)
                if(((1 << i) & k) == 0) //liber
                    for (j = 0; j< m; j++)
                        s_col[j] += v[i][j];
            
            //sortam vectorul de sume pe coloane, ca sa le alegem pe cele (m - c) maxime pentru a fi adaugate la suma finala
            sort(s_col, s_col + m);
            
            S = 0;
            for (i = c; i<m; i++)
                S += s_col[i];
            
            if(S_max < S)
                S_max = S;
        }
    
    fout << S_max;
    return 0;
}