Cod sursa(job #1977843)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 6 mai 2017 12:15:27
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

using namespace std;

int f[210];
int last[75010];
int dp[75010];

int main()
{
    freopen("ghiozdan.in", "r", stdin);
    freopen("ghiozdan.out", "w", stdout);
    int n, G;
    scanf("%d%d", &n, &G);
    for(int i=1; i<=n; i++)
    {
        int x;
        scanf("%d", &x);
        f[x]++;
    }
    dp[0] = 1;
    for(int i=200; i>0; i--)
        if(f[i])
            for(int j=G-i; j>=0; j--)
                if(dp[j])
                    for(int k=1; k<=f[i]; k++)
                    {
                        if(j+k*i > G || dp[j+k*i]) break;
                        dp[j+k*i] = dp[j]+k;
                        last[j+k*i] = i;
                    }
    for(int i=G; i>0; i--)
        if(dp[i])
        {
            printf("%d %d\n", i, dp[i]-1);
            while(i)
            {
                printf("%d\n", last[i]);
                i -= last[i];
            }
            return 0;
        }
    return 0;
}