Pagini recente » Cod sursa (job #1329294) | Cod sursa (job #1318082) | Cod sursa (job #3171498) | Cod sursa (job #624922) | Cod sursa (job #1941385)
#include <cstdio>
using namespace std;
bool d[75005];
int last[75005], x[75005], ap[75005], f[200];
int main()
{
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
int n, g, poz, nr;
scanf("%d %d", &n, &g);
for (int i = 1; i <= n; ++i)
{
scanf("%d", &nr);
++f[nr];
}
d[0] = 1;
for (int i = 200; i > 0; --i)
for (int j = g - i; j >= 0; --j)
if (d[j] == 1)
for (int k = 1; j + i * k <= g && k <= f[i] && !d[j + k * i]; ++k)
//if (d[j + i * k] == 0)
{
poz = j + k * i;
d[poz] = 1;
ap[poz] = ap[j] + k;
last[poz] = j;
x[poz] = i;
}
for (int i = g; i > 0; --i)
if(d[i] == 1)
{
printf("%d %d\n", i, ap[i]);
while (i > 0)
{
nr = ap[i] - ap[last[i]];
for (int j = 1; j <= nr; ++j)
printf("%d\n", x[i]);
i = last[i];
}
}
return 0;
}