Cod sursa(job #1819142)

Utilizator Matei_IgnutaMatei Ignuta Matei_Ignuta Data 30 noiembrie 2016 11:22:53
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
int d[75005], b[75005], fr[201];
//d[i][j]=obiecte cu greutate <=i pt cu suma j
int main()
{
    freopen("ghiozdan.in", "r", stdin);
    freopen("ghiozdan.out", "w", stdout);
    int n, s, elem;
    scanf("%d%d", &n, &s);
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &elem);
        fr[elem]++;
    }
    d[0]=1;
    for(int k=200; k>=1; k--)
        if(fr[k]!=0)
            for(int i=s-k; i>=0; i--)
                if(d[i]!=0)
                    for(int j=1; j<=fr[k] and i+j*k<=s and d[i+j*k]==0; j++)
                    {
                        d[i+j*k]=d[i]+j;
                        b[i+j*k]=k;
                    }
    for(int i=s; i>=1; i--)
        if(d[i]!=0)
        {
            printf("%d %d\n", i, d[i]-1);
            while(i!=0)
            {
                printf("%d\n", b[i]);
                i=i-b[i];
            }
            return 0;
        }
    return 0;
}