Pagini recente » Cod sursa (job #3165228) | Cod sursa (job #832407) | Cod sursa (job #978611) | Cod sursa (job #1541400) | Cod sursa (job #610349)
Cod sursa(job #610349)
#include <cstdio>
#define Wmax 202
#define Gmax 75002
#define Nmax 20002
int N, G, i, j, k, W[Nmax], nr[Wmax], A[Gmax], L[Gmax], C[Gmax];
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d %d", &N, &G);
for (i=0; i<N; ++i)
{
scanf("%d", &W[i]);
++nr[ W[i] ];
}
for (j=1; j<=G; ++j)
A[j] = 1000000;
for (i=Wmax; i>=1; --i)
if (nr[i])
for (j=G; j>=0; --j)
for (k=0; k<=nr[i] && j>=k*i; ++k)
if (A[j] > A[j-k*i] + k)
{
A[j] = A[j-k*i] + k;
L[j] = i;
C[j] = k;
}
while (A[G] == 1000000) --G;
printf("%d %d\n", G, A[G]);
while (G)
{
for (j=0; j<C[G]; ++j)
printf("%d\n", L[G]);
G -= L[G] * C[G];
}
return 0;
}