Cod sursa(job #610332)

Utilizator VmanDuta Vlad Vman Data 26 august 2011 17:49:35
Problema Ghiozdan Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>

#define Wmax 202
#define Gmax 75000
#define Nmax 20002

int N, G, i, j, k, W[Nmax], nr[Wmax], A[Wmax][Gmax], L[Wmax][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[0][j] = 1000000;
    for (i=1; i<=Wmax; ++i)
        for (j=0; j<=G; ++j)
        {
            A[i][j] = 1000000;
            for (k=0; k<=nr[i] && j>=k*i; ++k)
                if (A[i][j] > A[i-1][j-k*i] + k)
                   {
                    A[i][j] = A[i-1][j-k*i] + k;
                    L[i][j] = k;
                   }
        }
        
    while (A[Wmax][G] == 1000000) --G;
    printf("%d %d\n", G, A[Wmax][G]);
    for (i=Wmax; i>0; --i)
    {
        for (j=0; j<L[i][G]; ++j)
            printf("%d\n", i);
        G -= i * L[i][G];
    }
    
    return 0;
}