Cod sursa(job #3303277)

Utilizator DragosVNVisanescu Dragos Nicholas DragosVN Data 15 iulie 2025 02:16:36
Problema Elimin Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("elimin.in");
ofstream g("elimin.out");
int n,m,r,c;
int Smax;
vector<vector<int>>v;


int nrbiti(unsigned long long k)
{
    int nrb=0;
    while(k)
    {
        nrb+=(k&1);
        k>>=1;
    }
    return nrb;
}
void solve(int Sog)
{
    if(n>m)
    {
        for(unsigned long long k=0;k<=(1<<(m-1));k++)   //ne fixam o submultime de coloane pe care le stergem
        {
          if(nrbiti(k)==c)
          {
            vector<int>w;
            int S=Sog;
                for(int i=0;i<n;i++)
                {
                    int sl=0;
                    for(int j=0;j<m;j++)
                    {
                        if( k & (1<<j) )
                            S-=v[i][j];
                        else
                            sl+=v[i][j];
                    }
                    w.push_back(sl);
                }
            sort(w.begin(),w.end());
            for(int i=0;i<r;i++)
                S-=w[i];

            Smax=max(Smax,S);
          }
        }
    }
    else
    {
        for(unsigned long long k=0;k<=(1<<(n-1));k++) //ne fixam o submultime de linii pe care le stergem
        {
          if(nrbiti(k)==r)
          {
            vector<int>w;
            int S=Sog;
                for(int j=0;j<m;j++)
                {
                    int sc=0;
                    for(int i=0;i<m;i++)
                    {
                        if( k & (1<<i) )
                            S-=v[i][j];
                        else
                            sc+=v[i][j];
                    }
                    w.push_back(sc);
                }
        sort(w.begin(),w.end());
        for(int i=0;i<c;i++)
                S-=w[i];

        Smax=max(Smax,S);
          }
        }

    }
    g<<Smax;

}
int main()
{
    int Sog=0;
    f>>n>>m>>r>>c;

    for(int i=0;i<n;i++)
    {
        vector <int> nou;
        v.push_back(nou);
        for(int j=0;j<m;j++)
        {
            int x=0;
            f>>x;
            v[i].push_back(x);
            Sog+=x;
        }
    }
    solve(Sog);
    return 0;
}