Cod sursa(job #1165418)

Utilizator DenisacheDenis Ehorovici Denisache Data 2 aprilie 2014 17:53:45
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 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);
    }
    bool ok=1;
    while (ok)
    {
        ok=0;
        for (i=1;i<=n+1;i++)
        {
            if (q[i]) {q[i]=false;nrbit--;}
            else {q[i]=true;ok=1;nrbit++;break;}
        }
        if (nrbit==C && !q[n+1])
        {
            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++)
            {v[j]=0;
                 for (register int x=1;x<=m;x++)
                    v[j]+=Mat[j][x]*(!q[x]);}
            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;
}