Pagini recente » Cod sursa (job #3126882) | Cod sursa (job #1319032) | Cod sursa (job #2356085) | Cod sursa (job #58681) | Cod sursa (job #610352)
Cod sursa(job #610352)
#include <cstdio>
#define Wmax 202
#define Gmax 75002
#define Nmax 20002
int N, G, i, j, k, W, 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);
++nr[W];
}
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;
}
else if (A[j] != 1000000) break;
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;
}