Cod sursa(job #1036126)

Utilizator mvcl3Marian Iacob mvcl3 Data 18 noiembrie 2013 23:33:35
Problema Elimin Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <string.h>
#include <algorithm>
#define in "elimin.in"
#define out "elimin.out"
#define Max_Size 7300

std :: ifstream f(in);
std :: ofstream g(out);

int N, M, R, C, Best_Sum;
short A[Max_Size][Max_Size];

inline void Read_Data()
{
    f >> N >> M >> R >> C;

    if(N <= M)
        for(int i = 1; i <= N; ++i)
            for(int j = 1; j <= M; ++j)
                f >> A[i][j];
}

inline void Solve()
{
    int sum[Max_Size];

    for(int k = 0; k < (1 << N); ++k)
    {
        int nr_l = 0, aux = k;
        while(aux)  ++nr_l, aux = aux & (aux - 1);

        if(nr_l != R)   continue;

        int my_sum = 0;
        memset(sum, 0, sizeof(sum));

        for(int j = 1; j <= M; ++j)
            for(int i = 1; i <= N; ++i)
                if(!((1 << (i - 1)) & k))   sum[j] += A[i][j];

        std :: sort(sum + 1, sum + M + 1);

        for(int i = M; i > C; --i)  my_sum += sum[i];

        Best_Sum = std :: max(Best_Sum, my_sum);
    }
}

int main()
{
    Read_Data();
    Solve();

    g << Best_Sum << '\n';

    g.close();
    return 0;
}