Cod sursa(job #1941439)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 27 martie 2017 12:06:57
Problema Ghiozdan Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
using namespace std;
int last[75005], d[75005], f[200];
int main()
{
    freopen("ghiozdan.in", "r", stdin);
    freopen("ghiozdan.out", "w", stdout);

    int n, g, poz, nr, x;
    scanf("%d %d", &n, &g);
    for (int i = 1; i <= n; ++i){
        scanf("%d", &nr);
        ++f[nr];
    }
    d[0] = 1;
    for (int i = 200; i > 0; --i)
        if (f[i] != 0)
            for (int j = g - i; j >= 0; --j)
                if (d[j] != 0)
                    for (int k = 1; j + i * k <= g && k <= f[i] && d[j + k * i] == 0; ++k)
                    {
                        poz = j + k * i;
                        d[poz] = d[poz - i] + 1;
                        last[poz] = poz - i;
                    }
    for (int i = g; i > 0; --i)
        if(d[i] != 0)
        {
            printf("%d %d\n", i, d[i] - 1);
            while (i > 0)
            {
                printf("%d\n", i - last[i]);
                i = last[i];
            }
            return 0;
        }
    return 0;
}