Cod sursa(job #494136)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 20 octombrie 2010 20:19:01
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

#define maxim(a,b) (a>b ? a : b)

int n,m,l,c,v[905],sol;
int a[23][905],viz[905];

void actual()
{
    int i,j;
    memset(v,0,sizeof(v));
    for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
            if(!viz[j])
                v[i]+=a[j][i];
    sort(v+1,v+m+1);
    int sc=0;
    for(i=m;i>c;i--)
        sc+=v[i];
    sol=maxim(sol,sc);
}

void back(int poz,int ales)
{
    if(ales>l)
        return ;
    if(poz==n+1)
    {
        if(ales==l)
            actual();
        return ;
    }
    back(poz+1,ales);
    viz[poz]=1;
    back(poz+1,ales+1);
    viz[poz]=0;
}

int main ()
{
    int i,j,aux;
    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&l,&c);
    if(m<n)
    {
        for(j=1;j<=n;j++)
            for(i=1;i<=m;i++)
                scanf("%d",&a[i][j]);
        aux=m;
        m=n;
        n=aux;
        aux=l;
        l=c;
        c=aux;
    }
    else
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                scanf("%d",&a[i][j]);
    back(1,0);
    printf("%d\n",sol);
    return 0;
}