Cod sursa(job #1538395)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 28 noiembrie 2015 22:42:08
Problema Ghiozdan Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>

using namespace std;

int v[201];
int s[75001],t[75001];

int main()
{
    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);
    int n,gmax,m=0,i,j,x,nr=0;
    scanf("%d%d",&n,&gmax);
    for(i=0; i<n; i++)
    {
        scanf("%d",&x);
        v[x]++;
    }
    s[0]=1;
    t[0]=0;
    for(i=200; i>=1; i--)
    {
        if(v[i]==0) continue;
        if(s[gmax]==1) break;
        while(v[i])
        {
            for(j=m; j>=0; j--)
            {
                x=i+j;
                if(s[j]==1&&s[x]==0&&x<=gmax)
                {
                    s[x]=1;
                    t[x]=i;
                    if(m<x) m=x;
                }
            }
            v[i]--;
        }
    }

    printf("%d ",m);
    x=m;
    while(t[x])
    {
        nr++;
        x=x-t[x];
    }
    printf("%d\n",nr);
    while(t[m])
    {
        printf("%d\n",t[m]);
        m=m-t[m];
    }
    return 0;
}