Cod sursa(job #1555656)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 23 decembrie 2015 12:49:56
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

int mat[15][8000];
int cpy[15][8000];
int sum[8000];
int sels[16];
int ls,cs,r,c,val;
int k,maxim,s;

void printmat(){
    int i,j;
    for(i=0;i<ls;i++){
        for(j=0;j<cs;j++){
            printf("%d ", mat[i][j]);
        }
        printf("\n");
    }
}

void matcpy(){
    int i,j;
    k=0;
    for(i=0;i<ls;i++){
        if(sels[i]==1){
            continue;
        }
        for(j=0;j<cs;j++){
            cpy[k][j]=mat[i][j];
        }
        k++;
    }
}

void sum_col (){
    int i,j;

    for(j=0;j<cs;j++){
        sum[j]=0;
        for(i=0;i<k;i++){
            sum[j]+=cpy[i][j];
        }
    }
}
void gen_comb(int level,int prec){
    int i,j;

    if(level==r){
        if(val==r){
            matcpy();
            sum_col();
            sort(sum,sum+cs);
            s=0;
            for(j=c;j<cs;j++){
                s+=sum[j];
            }
            if(s>maxim){
                maxim=s;
            }
        }
        return;
    }

    for(i=prec;i<ls;i++){
        sels[i]=1;
        val++;
        gen_comb(level+1,i+1);
        sels[i]=0;
        val--;
    }


}

int main(){
    int i,j,t;

    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);

    scanf("%d%d%d%d",&ls,&cs,&r,&c);

    if(ls>cs ){
        t=ls; ls=cs; cs=t;
        t=r; r=c; c=t;
        for(i=0;i<cs;i++){
            for(j=0;j<ls;j++){
                scanf("%d",&mat[j][i]);
            }
        }
    }else{
        for(i=0;i<ls;i++){
            for(j=0;j<cs;j++){
                scanf("%d",&mat[i][j]);
            }
        }
    }
//    printmat();

    gen_comb(0,0);

    printf("%d",maxim);
    return 0;
}