Cod sursa(job #2710275)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 22 februarie 2021 11:59:19
Problema Elimin Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;

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

long long s[8000];

int main()
{
    int n, m, r, c;
    fin >> n >> m >> r >> c;

    vector<int> mat[8000], aux[8000];
    for(int i = 1; i <= n; ++i){
        mat[i].emplace_back(0), aux[i].emplace_back(0);
        for(int j = 1; j <= m; ++j){
            mat[i].emplace_back(0), aux[i].emplace_back(0);
            int val;
            fin >> val;

            mat[i][j] = val;
        }
    }

    int minn = min(n, m);
    if(minn != m)
    {
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= m; ++j)
                aux[j][i] = mat[i][j];
        swap(n, m);
        swap(r, c);
    }

    long long maxx = 0;
    for(int msk = 0; msk < (1 << m); ++msk)
        if(__builtin_popcount(msk) == c)
        {
            for(int i = 1; i <= n; ++i)
                s[i] = 0;
            long long sum = 0;
            for(int j = 1; j <= m; ++j){
                if((1 << (j - 1)) & msk)
                    continue;
                for(int i = 1; i <= n; ++i)
                    s[i] += mat[i][j], sum += mat[i][j];
            }
            sort(s + 1, s + n + 1);
            for(int i = 1; i <= r; ++i)
                sum -= s[i];
            maxx = max(maxx, sum);
        }
    fout << maxx << '\n';
    return 0;
}