Cod sursa(job #3255647)

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

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

int main()
{
    cin >> n >> m >> r >> c;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> v[i][j];
    if (n < m)
    {
        vector<bool> f(n, 1);
        for (int i = 0; i < r; i++)
            f[i] = 0;
        do
        {
            vector<vector<int>> g;
            int lg = 0;
            for (int i = 1; i <= n; i++)
                if (f[i - 1])
                {
                    g.push_back(vector<int>());
                    int s = 0;
                    for (int j = 1; j <= m; j++)
                        g[lg].push_back(v[i][j]);
                    lg++;
                }
            int st, s;
            st = 0;
            vector<int> sume;
            for (int j = 0; j < m; j++)
            {
                s = 0;
                for (int i = 0; i < lg; i++)
                    s += g[i][j];
                sume.push_back(s);
                st += s;
            }
            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
        {
            vector<vector<int>> g;
            int lg = 0;
            for (int j = 1; j <= m; j++)
                if (f[j - 1])
                {
                    g.push_back(vector<int>());
                    int s = 0;
                    for (int i = 1; i <= n; i++)
                        g[lg].push_back(v[i][j]);
                    lg++;
                }
            int st, s;
            st = 0;
            vector<int> sume;
            for (int i = 0; i < lg; i++)
            {
                s = 0;
                for (int j = 0; j < m; j++)
                    s += g[i][j];
                sume.push_back(s);
                st += s;
            }
            sort(sume.begin(), sume.end());
            for (int i = 0; i < r; i++)
                st -= sume[i];
            smax = max(smax, st);
            for (auto e : g)
            {
                for (auto e2 : e)
                cout << e2 << ' ';
                cout << endl;
            }
            cout << endl;

        } while(next_permutation(f.begin(), f.end()));

    }
    cout << smax;
    return 0;
}