Cod sursa(job #2518312)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 5 ianuarie 2020 14:58:51
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

int count_ones(int num) {
    int n = 0;
    while (num) {
        n++;
        num &= (num - 1);
    }
    return n;
}

int main() {
    int m, n, r, c, mm, nn;
    bool swapped = false;

    in >> m >> n >> r >> c;
    mm = m;
    nn = n;
    // m trebuie sa fie valoarea mai mica
    if (m > n) {
        swap(m, n);
        swap(r, c);
        swapped = true;
    }
    vector <vector <int> > mat(m, vector <int> (n));

    for (int i = 0; i < mm; i++) {
        for (int j = 0; j < nn; j++) {
            if (!swapped)
                in >> mat[i][j];
            else
                in >> mat[j][i];
        }
    }

    int s, sol = 0;
    for (int bits = 0; bits < (1 << m); bits++) {
        if (count_ones(bits) == r) {
            vector <int> sum(n, 0);
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if ((bits & (1 << i)) == 0)
                        sum[j] += mat[i][j];
                }
            }
            sort(sum.begin(), sum.end());
            s = 0;
            for (int i = c; i < n; i++) {
                s += sum[i];
            }
            if (sol < s)
                sol = s;
        }
    }

    out << sol << '\n';
    return 0;
}