Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 58 si 223 | ichb-locala-2013-11-12 | ichb_11-12 | Cod sursa (job #582322) | Cod sursa (job #508015)
Cod sursa(job #508015)
#include <cstdio>
const int MAX_G = 201;
const int MAX_N = 75001;
int n, s, G;
int f[MAX_G];
int sol[MAX_N], tata[MAX_N], ok[MAX_N];
int main()
{
int i, j, l;
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
scanf("%d %d", &n, &G);
int mx = 0;
for (i = 1; i <= n; ++i)
{
int x;
scanf("%d", &x);
++f[x];
if (x > mx)
mx = x;
}
ok[0] = 1;
for (i = mx; i; --i)
for (j = G - i; f[i] && j + 1; --j)
for (l = 1; ok[j] && l <= f[i] && j + l * i <= G; ++l)
if (!sol[j + l * i])
{
sol[j + l * i] = sol[j + (l - 1) * i] + 1;
ok[j + l * i] = 1;
tata[j + l * i] = i;
if (j + l * i > s)
s = j + l * i;
}
printf("%d %d\n", s, sol[s]);
for (i = s; i; i -= tata[i])
printf("%d\n", tata[i]);
}