Pagini recente » Cod sursa (job #413492) | Borderou de evaluare (job #2247405) | Cod sursa (job #1450304) | Cod sursa (job #975450) | Cod sursa (job #640273)
Cod sursa(job #640273)
# include <cstdio>
using namespace std;
int max, n, G, i, j, k;
int ct[20005], a[20005], A[75005], rez[75005], cate[75005];
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d%d",&n,&G);
for (i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
ct[a[i]]++;
if (max < a[i]) max = a[i];
}
for (i = 1; i <= G; i++)
A[i] = 100000;
for (i = max; i >= 1; i--)
if (ct[i])
for (j = G; j >= i - 1; j--)
for (k = 1; k <= ct[i] && j >= k * i; k++)
if (A[j] > A[j - i * k] + k && A[j] == 100000)
{
A[j] = A[j - i * k] + k;
rez[j] = i;
cate[j] = k;
//printf("%d %d %d\n",j,rez[j],cate[j]);
}
/*else
{
printf("cacat %d %d %d\n",i,j,k);
break;
}*/
//printf("\n");
while (A[G] == 100000) G--;
printf("%d %d\n",G,A[G]);
while (G)
{
printf("%d\n",rez[G]);
G = G - rez[G];
}
return 0;
}