Cod sursa(job #2575130)

Utilizator AlexDontuAlex Dontu AlexDontu Data 6 martie 2020 11:47:24
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.98 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;
    // for (i=1;i<=n;i++) if (v[i]==1) fout<<i<<" ";fout<<endl;
    //for (i=1;i<=m;i++) fout<<c[i]<<" ";fout<<endl<<endl;
}
void bkt (int k)
{
    int i,j,ii;
    if (k<=n)
    {
        for (i=1; i<=2; i++)
        {
            //for (ii=1;ii<=n;ii++)
            //fout<<v[ii]<<" ";
            // fout<<endl;
            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);
            }
            else
            {
                for (j=1; j<=m; j++)
                    c[j]+=a[k][j];
                s+=l[k];
                nr--;
                bkt(k+1);
            }

        }
    }
}

int main()
{
    fin>>n>>m>>r>>c1;
    //int a[n+1][m+1];

    if (n>=m&&c1!=0||r==0)
    {
        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);
    }

    else
    {
        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];
            }
        }
    }
    if (r==0&&c1==0) fout<<s;
    else
    {
        bkt(1);

        fout<<maxi;
    }

    return 0;
}