Cod sursa(job #3040690)

Utilizator unomMirel Costel unom Data 30 martie 2023 11:49:06
Problema Elimin Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream f("elimin.in");
ofstream g("elimin.out");
int n, m, r, c;
int v[1005][1005];
vector <int> lin;
vector <int> sumcol;
long long s;
long long smax = 0;


void bk(int k)
{
    if(k == n+1 && r == 0)
    {
        for(int i = 0; i<lin.size(); i++)
        {
            v[lin[i]][m+1] = -1;
        }

        for(int j = 1; j<=m; j++)
        {
            s = 0;
            for(int i = 1; i<=n; i++)
            {
                if(v[i][m+1] == 0)
                {
                    s += v[i][j];
                }
            }
            sumcol.push_back(s);
        }

        sort(sumcol.begin(), sumcol.end());

        s = 0;

        for(int i = c; i<sumcol.size(); i++)
        {
            s += sumcol[i];
        }

        smax = max(smax, s);

        for(int i = 0; i<lin.size(); i++)
        {
            v[lin[i]][m+1] = 0;
        }
        sumcol.clear();
        return;

    }
    else if(k == n+1)
    {
        return;
    }
    else
    {
        if(r >= 1)
        {
            r--;
            lin.push_back(k);
            bk(k+1);
            r++;
            lin.pop_back();
            bk(k+1);
        }
        else
        {
            bk(k+1);
        }
    }
}

int main()
{
    f>>n>>m>>r>>c;
    for(int i = 1; i<=n; i++)
    {
        for(int j = 1; j<=m; j++)
        {
            f>>v[i][j];
        }
    }

    bk(1);

    g<<smax;
    return 0;
}