Cod sursa(job #1729772)

Utilizator LucianTLucian Trepteanu LucianT Data 15 iulie 2016 16:48:37
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>
#define maxN 205
#define maxxx 75005
using namespace std;
int n,i,j,g,x,ob,sol;
int fr[maxN],dp[maxxx],a[maxxx];
int main()
{
    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);
    scanf("%d %d",&n,&g);
    for(i=1;i<=n;i++)
        scanf("%d",&x),fr[x]++;
    dp[0]=1,sol=g;
    for(i=200;i>=1;i--)
        if(fr[i])
            for(j=g-i;j>=0;j--)
            if(dp[j])
                for(ob=1;ob<=fr[i] && j+ob*i<=g;ob++)
                    if(dp[j+ob*i]==0)
                    dp[j+ob*i]=dp[j]+ob,a[j+ob*i]=i;
                    else break;
    while(!dp[sol])
        sol--;
    printf("%d %d\n",sol,dp[sol]-1);
    while(dp[sol]!=1)
        printf("%d\n",a[sol]),sol-=a[sol];
    return 0;
}