Cod sursa(job #49719)

Utilizator DastasIonescu Vlad Dastas Data 6 aprilie 2007 11:55:49
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <stdio.h>
#include <iostream>

FILE *in = fopen("elimin.in","r"), *out = fopen("elimin.out","w");

int n, m, r, c;
short a[100][100];

int s = 0;

void read()
{
    fscanf(in, "%d %d %d %d", &m, &n, &r, &c);

    for ( int i = 1; i <= m; ++i )
        for ( int j = 1; j <= n; ++j )
            fscanf(in, "%d" , &a[i][j]);
}


void suma()
{
    int t = 0;
    int b[100];
    short eliminate[100] = {0};

    for ( int i = 1; i <= m; ++i )
        for ( int j = 1; j <= n; ++j )
            if ( eliminate[j] == 0 )
                b[i] += a[i][j];

    for ( int i = 1; i < m; ++i )
        for ( int j = i+1; j <= m; ++j )
            if ( b[i] > b[j] )
            {
                int q = b[i];
                b[i] = b[j];
                b[j] = q;
            }

    for ( int i = r+1; i <= m; ++i )
        t += b[i];

    if ( t > s )
        s = t;

//    for ( int i = 1; i <= n; ++i )
//        eliminate[i] = 0;
//    for ( int i = 1; i <= m; ++i )
//        b[i] = 0;
}

short st[100];

void back(int col)
{
    for ( int i = st[col-1]+1; i <= n; ++i )
    {
        st[col] = i;
        if ( col == c )
        {
            for ( int t = 1; t <= c; ++t )
                eliminate[st[t]] = 1;

            suma();
        }
        else
            back(col+1);
    }
}

int main()
{
    read();
    memset(st, 0, sizeof(st));
    back(1);

    fprintf(out, "%d\n", s);

	return 0;
}