Cod sursa(job #1650663)

Utilizator andrei-sasAndrei Sas-Miresan andrei-sas Data 11 martie 2016 19:42:27
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <set>
#include <algorithm>
#include <stack>
#define nmax 205
#define gmax 75005
#define inf 1<<29
using namespace std;
int n,g,d[gmax],a[gmax];
int v[nmax];

int main()
{
    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);
    scanf("%d %d",&n,&g);
    int i,j,k;
    for (i=1;i<=n;i++) {
        scanf("%d",&j);
        v[j]++;
    }
    d[0]=1;

    for (i=200;i>=1;i--)
        if (v[i])
            for (k=g-i;k>=0;k--)
                if (d[k])
                    for (j=1;j<=v[i]&&k+i*j<=g;j++)
                        if (!d[k+i*j])
                        {
                            d[k+i*j]=d[k]+j;
                            a[k+i*j]=i;
                        }
                        else
                            break;
    while (!d[g])
        g--;
    printf("%d %d\n",g,d[g]-1);
    while (d[g]!=1) {
        printf("%d\n",a[g]);
        g-=a[g];
    }
    return 0;
}