Cod sursa(job #610349)

Utilizator VmanDuta Vlad Vman Data 26 august 2011 18:19:48
Problema Ghiozdan Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>

#define Wmax 202
#define Gmax 75002
#define Nmax 20002

int N, G, i, j, k, W[Nmax], nr[Wmax], A[Gmax], L[Gmax], C[Gmax];

int main()
{
    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);
    
    scanf("%d %d", &N, &G);
    for (i=0; i<N; ++i)
    {
        scanf("%d", &W[i]);
        ++nr[ W[i] ];
    }
    
    for (j=1; j<=G; ++j)
        A[j] = 1000000;
    for (i=Wmax; i>=1; --i)
      if (nr[i])
        for (j=G; j>=0; --j)
            for (k=0; k<=nr[i] && j>=k*i; ++k)
                if (A[j] > A[j-k*i] + k)
                   {
                    A[j] = A[j-k*i] + k;
                    L[j] = i;
                    C[j] = k;
                   }
        
    while (A[G] == 1000000) --G;
    printf("%d %d\n", G, A[G]);
    while (G)
    {
        for (j=0; j<C[G]; ++j)
            printf("%d\n", L[G]);
        G -= L[G] * C[G];    
    }
    
    return 0;
}