Cod sursa(job #1196716)

Utilizator tudormaximTudor Maxim tudormaxim Data 8 iunie 2014 23:39:53
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#define nmax 75005
using namespace std;
int ap[205],dp[nmax],nxt[nmax];
int main()
{
    int N,G,x,i,j,k;
    freopen ("ghiozdan.in","r",stdin);
    freopen ("ghiozdan.out","w",stdout);
    scanf("%d%d", &N,&G);
    for(i=1;i<=N;++i)
    {
        scanf("%d", &x);
        ++ap[x];
    }
    dp[0]=1;
    for(i=200;i;--i)
    {
        if(ap[i])
        {
            for(j=G-i;j>=0;--j)
            {
                if(dp[j])
                    for(k=1;k<=ap[i] && j+k*i<=G && !dp[j+k*i];++k)
                    {
                        dp[j+k*i]=dp[j]+k;
                        nxt[j+k*i]=i;
                    }
            }
        }
    }
    for(i=G;!dp[i];--i);
    printf("%d %d\n", i,dp[i]-1);
    for(;nxt[i];i-=nxt[i])
        printf("%d\n", nxt[i]);
    return 0;
}