Cod sursa(job #3255674)

Utilizator Carnu_EmilianCarnu Emilian Carnu_Emilian Data 11 noiembrie 2024 20:19:26
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fcin("elimin.in");
ofstream fcout("elimin.out");

const int N = 1005;
int v[N][N];
int n, m, r, c, smax;

int main()
{
    fcin >> n >> m >> r >> c;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            fcin >> v[i][j];
    if (n < m)
    {
        vector<bool> f(n, 1);
        for (int i = 0; i < r; i++)
            f[i] = 0;
        do /// scoatem r linii
        {
            vector<int> sume(m);
            int st = 0;
            for (int j = 1; j <= m; j++)
                for (int i = 1; i <= n; i++)
                    if (f[i - 1])
                    {
                        st += v[i][j];
                        sume[j - 1] += v[i][j];
                    }
            sort(sume.begin(), sume.end());
            for (int i = 0; i < c; i++)
                st -= sume[i];
            smax = max(smax, st);
        } while(next_permutation(f.begin(), f.end()));
    }
    else
    {
        vector<bool> f(m, 1);
        for (int i = 0; i < c; i++)
            f[i] = 0;
        do /// scoatem c coloane
        {
            vector<int> sume(n);
            int st = 0;
            for (int i = 1; i <= n; i++)
                for (int j = 1; j <= m; j++)
                    if (f[j - 1])
                    {
                        st += v[i][j];
                        sume[i - 1] += v[i][j];
                    }
            sort(sume.begin(), sume.end());
            for (int i = 0; i < r; i++)
                st -= sume[i];
            smax = max(smax, st);
        } while(next_permutation(f.begin(), f.end()));

    }
    fcout << smax;
    return 0;
}