Cod sursa(job #1168397)

Utilizator usermeBogdan Cretu userme Data 8 aprilie 2014 11:26:17
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>

FILE*f=fopen("ghiozdan.in","r");
FILE*h=fopen("ghiozdan.out","w");

int a[201],v[75001],d[75001];

int main(){
    int n,g;
    fscanf(f,"%d%d",&n,&g);
    for ( int i=1;i<=n;++i ){
        int e;
        fscanf(f,"%d",&e);
        ++a[e];
    }
    v[0]=1;
    for ( int i=200;i>=1;--i )
        if ( a[i]!=0 )
            for ( int j=g-i;j>=0;--j )
                if ( v[j]!=0 ){
                    for ( int k=1;k<=a[i]&&i*k+j<=g&&!v[j+k*i];++k ){
                        v[i*k+j]=v[j]+k;
                        d[i*k+j]=i;
                    }
                }
    int r;
    for ( int i=g;i>=1;--i )
        if ( v[i]!=0 ){
            r=i;
            break;
        }
    fprintf(h,"%d %d\n",r,v[r]-1);
    while ( r!=0 ){
        fprintf(h,"%d\n",d[r]);
        r-=d[r];
    }
    return 0;
}