Cod sursa(job #1017366)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 27 octombrie 2013 18:29:22
Problema Elimin Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <algorithm>

#define kNMAX 700

int Mat[20][8000], suma[8000];
int nrLinii, nrColoane, xColoane, xLinii, sumaInitiala, sumaMax;

std::fstream in, out;

void citire(){

    in >> nrLinii >> nrColoane >> xLinii >> xColoane;

    if (nrLinii > nrColoane){
        for(int i = 1; i <= nrLinii; i++)
            for(int j = 1; j <= nrColoane; j++){
                in >> Mat[j][i];
            }


        std::swap(nrLinii, nrColoane);
        std::swap(xColoane, xLinii);
    
    }else{
        for(int i = 1; i <= nrLinii; i++)
            for(int j = 1; j <= nrColoane; j++)
                in >> Mat[i][j];
        
    }
    return;
}


int main(){

    in.open("elimin.in", std::ios::in);
    out.open("elimin.out", std::ios::out);


    citire();

    for(int val = 0; val < (1 << nrLinii); val++){
        int nr1 = 0;
        for(int j = 0; j < nrLinii; j++){
            if ((1 << j) & val) nr1++;
        }
        if (nr1 != nrLinii - xLinii)  continue;

        std::fill(suma, suma + nrColoane + 1, 0);

        for(int i = 1; i <= nrLinii; i++){
            if ((1 << (i - 1)) & val){
                for(int j = 1; j <= nrColoane; j++)
                    suma[j] += Mat[i][j];
            }
        }
        std::sort(suma + 1, suma + nrLinii + 1);
        int aux = 0;
        for(int i = xColoane + 1; i <= nrColoane; i++){
            aux += suma[i];
        }
        sumaMax = std::max(aux, sumaMax);
    }

    out << sumaMax;
    std::cout << sumaMax;

    in.close();
    out.close();

    return 0;
}