Cod sursa(job #2261609)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 16 octombrie 2018 14:39:28
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 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; }