Cod sursa(job #1173006)

Utilizator andrettiAndretti Naiden andretti Data 18 aprilie 2014 14:06:50
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#include<algorithm>
#define maxg 75005
#define maxv 205
#define inf 0x3f3f3f3f
using namespace std;

int n,G;
int s[maxg],nr[maxv],p[maxg];

void read()
{
    int x;
    scanf("%d%d",&n,&G);
    for(int i=1;i<=n;i++) scanf("%d",&x),nr[x]++;
}

void solve()
{
    s[0]=0;
    for(int i=1;i<=G;i++) s[i]=inf;

    for(int i=200;i;i--)
     if(nr[i])
     for(int j=G-i;j>=0;j--)
      if(s[j]!=inf)
      for(int k=1;k<=nr[i] && j+i*k<=G && s[j+i*k]==inf;k++)
       {
           s[j+i*k]=s[j]+k;
           p[j+i*k]=i;
       }
    int last;
    for(last=G;s[last]==inf;last--);
    printf("%d %d\n",last,s[last]);
    for(int i=last;p[i];i-=p[i]) printf("%d\n",p[i]);

}

int main()
{
    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);

    read();
    solve();

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