Pagini recente » Cod sursa (job #2724553) | Cod sursa (job #3235553) | Cod sursa (job #2591455) | Cod sursa (job #235771) | Cod sursa (job #610332)
Cod sursa(job #610332)
#include <cstdio>
#define Wmax 202
#define Gmax 75000
#define Nmax 20002
int N, G, i, j, k, W[Nmax], nr[Wmax], A[Wmax][Gmax], L[Wmax][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[0][j] = 1000000;
for (i=1; i<=Wmax; ++i)
for (j=0; j<=G; ++j)
{
A[i][j] = 1000000;
for (k=0; k<=nr[i] && j>=k*i; ++k)
if (A[i][j] > A[i-1][j-k*i] + k)
{
A[i][j] = A[i-1][j-k*i] + k;
L[i][j] = k;
}
}
while (A[Wmax][G] == 1000000) --G;
printf("%d %d\n", G, A[Wmax][G]);
for (i=Wmax; i>0; --i)
{
for (j=0; j<L[i][G]; ++j)
printf("%d\n", i);
G -= i * L[i][G];
}
return 0;
}