Pagini recente » Cod sursa (job #383312) | Cod sursa (job #1987469) | Cod sursa (job #2001115) | Cod sursa (job #54891) | Cod sursa (job #18985)
Cod sursa(job #18985)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define nm 20100
#define sm 76000
#define vm 256
int n, s, a[nm], c[sm], last[sm], x[vm];
int main()
{
int i, j, crt, tmp, ok;
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
scanf("%d%d", &n, &s);
for (i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
++x[a[i]];
}
sort(a + 1, a + n + 1);
for (i = n; i > 0; --i)
{
for (j = s; j > 0; --j)
if (c[j] && (!c[j + a[i]] || c[j] + 1 < c[j + a[i]]))
{
c[j + a[i]] = c[j] + 1;
last[j + a[i]] = i;
}
if (!c[a[i]])
{
c[a[i]] = 1;
last[a[i]] = i;
}
}
for (i = s; i >= 0 && !c[i]; --i);
printf("%d %d\n", i, c[i]);
tmp = c[i];
crt = i;
for (i = n; i > 0; --i)
if ((c[crt - a[i]] || crt == a[i]) && x[a[i]] && c[crt - a[i]] < tmp)
{
printf("%d\n", a[i]);
--x[a[i]];
--tmp;
crt -= a[i];
}
return 0;
}