Cod sursa(job #2575104)

Utilizator Danut200333Dumitru Daniel Danut200333 Data 6 martie 2020 11:40:39
Problema Elimin Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int n,m,r,c,v[8000],nr,i,j,linie[8000],coloana[8000],smax,a[90][7501];
void sol()
{
    int i,j,b[8001],s=0;
    for(i=1; i<=n; i++)
    {
        if(v[i]==1)
        {
            //fout<<i<<" ";
            for(j=1;j<=m;j++)
            {
                coloana[j]-=a[i][j];
            }
        }
    }

    for(i=1;i<=m;i++)
    {
        b[i]=coloana[i];
    }
    sort(b+1,b+m+1);
    for(i=m;i>=c+1;i--) s+=b[i];
    //fout<<s;
    if(s>smax)smax=s;
    for(i=1; i<=n; i++)
    {
        if(v[i]==1)
        {
            for(j=1;j<=m;j++)
            {
                coloana[j]+=a[i][j];
            }
        }
    }//fout<<'\n';
}
void back(int x)
{
    nr++;
    v[x]=1;
    if(nr==r)
    {
        sol();
    }
    else
    {
       if(x<n) back(x+1);
    }
    v[x]=0;
    nr--;
    if(x<n)back(x+1);
}
int main()
{
    fin>>n>>m>>r>>c;
    if(n<m)
    {
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m; j++)
            {
                fin>>a[i][j];
                linie[i]+=a[i][j];
                coloana[j]+=a[i][j];
            }
        }
    }
    else
    {
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=m; j++)
            {
                fin>>a[j][i];
                linie[j]+=a[j][i];
                coloana[i]+=a[j][i];
            }
        }
        swap(n,m);
        swap(r,c);
    }
    back(1);
    fout<<smax;
    return 0;
}