Cod sursa(job #2313731)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 7 ianuarie 2019 13:23:32
Problema Elimin Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<bits/stdc++.h>
using namespace std;

const int maxM=35000;
int n,m,r,c;

int l[maxM],L[maxM];
int a[18][35000],sol;
int main()
{
    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);

    scanf("%d%d%d%d",&n,&m,&r,&c);

    if(n<=m)
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&a[i][j]);
    }
        else
    {
        swap(n,m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&a[j][i]);

        swap(r,c);
    }


    for(int j=1;j<=m;j++)
        for(int i=1;i<=n;i++)
            L[j]+=a[i][j];


    int lmask=(1<<n);
    for(int mask=0;mask<lmask;mask++)
    {
        if(__builtin_popcount(mask)==r)
        {
            for(int i=1;i<=m;i++)
                l[i]=L[i];

            for(int bit=0;bit<n;bit++)
            {
                if(mask&(1<<bit))
                {
                    for(int j=1;j<=m;j++)
                        l[j]-=a[bit+1][j];
                }
            }

            sort(l+1,l+m+1);

            int sum=0;

            for(int k=c+1;k<=m;k++)
                sum=sum+l[k];

            sol=max(sol,sum);
        }
    }

    printf("%d\n",sol);



    return 0;
}