Cod sursa(job #1565633)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 11 ianuarie 2016 08:38:29
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,r,c;
bool select[8000];
int a[20][8000],f[20][8000],sum[8000],answer=0;
void check(){
    int i,j,k=0,total=0;
    for(i=0;i<n;i++){
        if(select[i]==true)
            continue;
        for(j=0;j<m;j++)
            f[k][j]=a[i][j];
        k++;
    }
    for(j=0;j<m;j++){
        sum[j]=0;
        for(i=0;i<k;i++)
            sum[j]+=f[i][j];
    }
    sort(sum,sum+m);
    for(j=c;j<m;j++)
        total+=sum[j];
    if(total>answer)
        answer=total;
}
void backtracking(int level,int prec){
    int i;
    if(level==r){
        check();
        return;
    }
    for(i=prec;i<n;i++){
        select[i]=true;
        backtracking(level+1,i+1);
        select[i]=false;
    }
}
int main(){
    freopen("elimin.in","r",stdin);
    freopen("elimin.out","w",stdout);
    int i,j,temp;
    scanf("%d%d%d%d",&n,&m,&r,&c);
    if(n>m){
        temp=n;
        n=m;
        m=temp;
        temp=r;
        r=c;
        c=temp;
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
                scanf("%d",&a[j][i]);
    }
    else
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                scanf("%d",&a[i][j]);
    backtracking(0,0);
    printf("%d",answer);
    return 0;
}