Cod sursa(job #1722002)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 26 iunie 2016 23:48:48
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.11 kb
#include<cstdio>
#define MAXG 75010
#define MAXVAL 210
#define INF 1000000000
using namespace std;
int vc[MAXVAL],dad[MAXG],seen[MAXG];
void Reconstitute(int x,int current){
    if(x==0){
        printf("%d\n",current);
        return;
    }
    Reconstitute(x-dad[x],current+1);
    printf("%d\n",dad[x]);
}
int main(){
    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);
    int n,g,i,j,k,x,best;
    scanf("%d%d",&n,&g);
    for(i=1;i<=n;i++){
        scanf("%d",&x);
        vc[x]++;
    }
    dad[0]=-1;
    for(i=200;i>=1;i--){
        for(j=0;j<i;j++){
            best=-INF;
            for(k=i+j;k<=g;k+=i){
                if(dad[k-i]!=0)
                    best=k-i;
                if(k-best<=i*vc[i])
                    seen[k]=1;
                else
                    seen[k]=0;
            }
        }
        for(j=1;j<=g;j++)
            if(dad[j]==0&&seen[j]==1)
                dad[j]=i;
    }
    best=0;
    for(i=1;i<=g;i++)
        if(dad[i]!=0)
            best=i;
    printf("%d ",best);
    Reconstitute(best,0);
    return 0;
}