Cod sursa(job #1941407)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 27 martie 2017 11:44:04
Problema Ghiozdan Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 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)
        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]; ++k)
                {
                    poz = j + k * i;
                    d[poz] = d[j] + k;
                    last[poz] = j;
                }
    for (int i = g; i > 0; --i)
        if(d[i] != 0)
        {
            printf("%d %d\n", i, d[i] - 1);
            while (i > 0)
            {
                nr = d[i] - d[last[i]];
                x = (i - last[i]) / nr;
                for (int j = 1; j <= nr; ++j)
                    printf("%d\n", x);
                i = last[i];
            }
            return 0;
        }
    return 0;
}