Cod sursa(job #17409)

Utilizator therain3rVlad Dumitrescu therain3r Data 15 februarie 2007 20:18:24
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
#include <cstdlib>
#include <math.h>

using namespace std;

int col[100];
int tabla[100][100],n,m,r,c;

int gen_col(int x) {
    int k=1;
    while (x) {
          if(x%2==0) col[k]=0;
          else col[k]=1;
          k++;
          x=x/2;
    }
    return 1;
}

int suma() {
    int sumelinii[2][100],min,s=0;
    for (int i=1;i<=m;i++) {
        sumelinii[0][i]=i;
        sumelinii[1][i]=0;
        for (int j=1;j<=n;j++)
            if (col[j]!=1) sumelinii[1][i]+=tabla[i][j];
    }

    for (int i=1;i<=r;i++) {
        min=1;
        for (int j=2;j<=m;j++)
            if (sumelinii[1][min]>sumelinii[1][j]) min=j;
        
        sumelinii[0][min]=-1;
    }
    
    for (int i=1;i<=m;i++)
        for (int j=1;j<=n;j++)
            if ( (sumelinii[0][i]!=-1) && (col[j]!=1) )
               s=s+tabla[i][j];
         
    return s;
}

int valid() {
    int s=0;
    for (int i=1;i<=n;i++)
        s=s+col[i];
    if (s==c) return 1;
    else return 0;
}

int main() {
    int s=0,sl=0;
    freopen("elimin.in","r",stdin);
    scanf("%d %d %d %d",&m,&n,&r,&c);
    for (int i=1;i<=m;i++)
        for (int j=1;j<=n;j++)
            scanf("%d",&tabla[i][j]);
    for (int i=0;i<pow(2,m);i++) {
        gen_col(i);
        if (valid()) {
           sl=suma();
           if (sl>s) s=sl;
        }
    }
    freopen("elimin.out","w",stdout);
    printf("%d",s);
    return 0;
}