Cod sursa(job #2253336)

Utilizator oso.andinoooIonut Stan oso.andinooo Data 3 octombrie 2018 21:30:58
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

const int G = 211, N = 75011;
int f[G], sol[N], str[N];

int mx(int x, int y) {
    if(x > y)
        return x;
    return y; }

int main() {
    freopen("ghiozdan.in", "r", stdin);
    freopen("ghiozdan.out", "w", stdout);
    int n, s, g, m = 0, x;
    scanf("%d %d", &n, &g);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &x);
        f[x]++;
        m = mx(x, m); }
    sol[0] = 1;
    s = 0;
    for (int i = m; i >= 0; i--)
        if (f[i] > 0)
            for (int j = g - i; j >= 0; j--)
                if (sol[j] > 0)
                    for (int l = 1; l <= f[i] && j + l * i <= g && sol[j + l * i] == 0; ++l) {
                            sol[j + l * i] = sol[j + (l - 1) * i] + 1;
                            str[j + l * i] = i;
                            if (j + l * i > s)
                                s = j + l * i; }

    sol[s]--;
    printf("%d %d\n", s, sol[s]);

    for (int i = s; i; i -= str[i])
        printf("%d\n", str[i]);
    return 0; }