Cod sursa(job #1738242)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 6 august 2016 02:55:23
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;

int f[205],
    l[75005],
    u[75005];

vector<int> ant;

int main(void) {
    freopen("ghiozdan.in",  "r", stdin);
    freopen("ghiozdan.out", "w", stdout);
    memset(l, 0xFF, sizeof(l));
    int n, g, t, ans;

    l[0] = 0;

    scanf("%d%d",&n,&g);
    while(n--) {
        scanf("%d",&t);
        f[t]++;
    }

    for(int i=200; i;                                 --i) {
    for(int j=g;   j>=0;                              --j) if(l[j]>=0) {
    for(int k=1;   k<=f[i] && j+k*i<=g && l[j+k*i]<0; ++k) {
        t    = j + k * i;
        l[t] = j;
        u[t] = i;
    }}}

    for(ans=g; l[ans]==-1; --ans);

    t = ans;
    while(t) {
        ant.push_back(u[t]);
        t-= u[t];
    }

    printf("%d %d\n",ans,ant.size());
    for(int i:ant)
        printf("%d\n",i);

    fclose(stdin);
    fclose(stdout);
    return 0;
}