Cod sursa(job #2570343)

Utilizator AlexDontuAlex Dontu AlexDontu Data 4 martie 2020 16:16:27
Problema Elimin Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("elimin.in");
ofstream fout ("elimin.out");
int s,c[8001],l[8001],r,c1,m,i,j,maxi,n,v[8001],nr,a[1001][1001],cc[8001];
void sol ()
{
    int s1=s,i;
    for (i=1; i<=m; i++)
        cc[i]=c[i];
    sort (cc+1,cc+m+1);
    for (i=1; i<=c1; i++)
        s1-=cc[i];
    if (s1>maxi) maxi=s1;
}
void bkt (int k)
{
    int i,j,ii;
    if (k<=n)
    {
        for (i=1; i<=2; i++)
        {
            v[k]=i;
            if (v[k]==1)
            {
                s-=l[k];
                nr++;
                for (j=1; j<=m; j++)
                    c[j]-=a[k][j];

                if (nr==r)
                {
                    sol();

                }
                else bkt(k+1);
                for (j=1; j<=m; j++)
                    c[j]+=a[k][j];
                s+=l[k];
                nr--;

            }
            else
            {
                bkt(k+1);
            }

        }
    }
}

int main()
{
    fin>>n>>m>>r>>c1;
    if (n<m)
    {
        for (i=1; i<=n; i++)
        {
            for (j=1; j<=m; j++)
            {
                fin>>a[i][j];
                l[i]+=a[i][j];
                c[j]+=a[i][j];
                s+=a[i][j];
            }
        }
    }
    else
    {
        for (i=1; i<=n; i++)
        {
            for (j=1; j<=m; j++)
            {
                fin>>a[j][i];
                l[j]+=a[j][i];
                c[i]+=a[j][i];
                s+=a[j][i];
            }
        }
        swap(r,c1);
        swap(n,m);
    }

    bkt(1);
    fout<<maxi;

    return 0;
}