Cod sursa(job #1576629)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 22 ianuarie 2016 17:59:12
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
int mat[15][7300],sum[7300],ales[7300],maxim,n,m,l,c;
void verif(){
    int i,j,rasp=0;
    for(i=1;i<=m;i++)
        sum[i]=0;
    for(i=1;i<=n;i++)
        if(ales[i]==1)
            for(j=1;j<=m;j++)
                sum[j]-=mat[i][j];
    for(j=1;j<=m;j++)
        for(i=1;i<=n;i++)
            sum[j]+=mat[i][j];
    sort(sum+1,sum+m+1);
    for(i=c+1;i<=m;i++)
        rasp+=sum[i];
    if(rasp>maxim)
        maxim=rasp;
}
void bkt(int niv,int ant){
    int i;
    if(niv==l){
        verif();
    }
    else{
        for(i=ant+1;i<=n;i++){
            ales[i]=1;
            bkt(niv+1,i);
            ales[i]=0;
        }
    }
}
int main(){
    FILE *fin,*fout;
    fin=fopen("elimin.in","r");
    fout=fopen("elimin.out","w");
    int i,j,copie;
    fscanf(fin,"%d%d%d%d",&n,&m,&l,&c);
    if(n<=m){
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                fscanf(fin,"%d",&mat[i][j]);
    }
    else{
        copie=m;
        m=n;
        n=copie;
        copie=c;
        c=l;
        l=copie;
        for(i=1;i<=m;i++)
            for(j=1;j<=n;j++)
                fscanf(fin,"%d",&mat[j][i]);
    }
    bkt(0,0);
    fprintf(fout,"%d",maxim);
    fclose(fin);
    fclose(fout);
    return 0;
}