Pagini recente » Cod sursa (job #40499) | Cod sursa (job #78755) | Cod sursa (job #739430) | Cod sursa (job #3267318) | Cod sursa (job #1941439)
#include <cstdio>
using namespace std;
int last[75005], d[75005], f[200];
int main()
{
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
int n, g, poz, nr, x;
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)
if (f[i] != 0)
for (int j = g - i; j >= 0; --j)
if (d[j] != 0)
for (int k = 1; j + i * k <= g && k <= f[i] && d[j + k * i] == 0; ++k)
{
poz = j + k * i;
d[poz] = d[poz - i] + 1;
last[poz] = poz - i;
}
for (int i = g; i > 0; --i)
if(d[i] != 0)
{
printf("%d %d\n", i, d[i] - 1);
while (i > 0)
{
printf("%d\n", i - last[i]);
i = last[i];
}
return 0;
}
return 0;
}