Cod sursa(job #1164189)

Utilizator DenisacheDenis Ehorovici Denisache Data 1 aprilie 2014 22:07:26
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int Mat[7300][17],i,j,n,m,St;
int R,C,v[7300],l,nrbit;
bool q[105];
int RezFinal;
int main()
{
    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);
    scanf("%d %d %d %d",&n,&m,&R,&C);
    if (m<n)
    {
        for (i=1;i<=n;i++)
           for (j=1;j<=m;j++)
           {scanf("%d",&Mat[i][j]); St+=Mat[i][j];}
    }
    else
    {
        for (i=1;i<=n;i++)
            for (j=1;j<=m;j++)
            {scanf("%d",&Mat[j][i]); St+=Mat[j][i];}
        swap(n,m); swap(R,C);
    }
    int nrsub=(1<<m);
    for (i=1;i<nrsub;i++)
    {
        l=0; nrbit=0; j=i; while(j){if(j&1){q[++l]=true; nrbit++;} else q[++l]=false; j>>=1;}
        if (nrbit==C)
        {
            int S=St;
            for (j=1;j<=m;j++)
                if (q[j])
                for (register int x=1;x<=n;x++)
                    S-=Mat[x][j];
            for (j=1;j<=n;j++)
                for (register int x=1;x<=m;x++)
                    v[j]+=Mat[j][x]*(!q[j]);
            sort(v+1,v+n+1);
            for (j=1;j<=R;j++)
                S-=v[j];
            if (S>RezFinal) RezFinal=S;
        }
    }
    printf("%d",RezFinal);
    return 0;
}