Pagini recente » Cod sursa (job #1775789) | Cod sursa (job #1940059) | Cod sursa (job #1389437) | Cod sursa (job #120133) | Cod sursa (job #18384)
Cod sursa(job #18384)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n, gdat;
struct nod {int x;} v[25050];
int comp(const void *i, const void *j)
{
nod *ei= (nod*)i,
*ej= (nod*)j;
return ej->x - ei->x;
}
void solve()
{
int s[75205], pred[75205];
int M=0;
memset(s, 0x3f3f3f3f, sizeof(s));
s[0]=0;
pred[0]=0;
for(int i=1; i<=n; ++i) {
if( M>gdat) M=gdat;
for(int j=M; j>=0; --j) {
if( s[gdat]!=0x3f3f3f3f) { i=n; break; }
// if( s[j]+1 < s[j+v[i].x]) {
if( s[j]!=0x3f3f3f3f && s[j + v[i].x]==0x3f3f3f3f) {
s[j+v[i].x]= s[j]+1;
pred[j+v[i].x]=i;
if( j+v[i].x > M) M= j+v[i].x;
}
}
}
for(int i=gdat; i>=0; --i) if( s[i]!=0x3f3f3f3f) {gdat=i; break;}
freopen("ghiozdan.out","w",stdout);
printf("%d %d\n",gdat,s[gdat]);
M=gdat;
while(pred[M]) {
printf("%d\n",v[pred[M]].x);
M=M-v[pred[M]].x;
}
}
int main()
{
freopen("ghiozdan.in","r",stdin);
scanf("%d %d",&n,&gdat);
for(int i=1; i<=n; ++i) scanf("%d",&v[i].x);
qsort(v+1, n, sizeof(nod), comp);
solve();
return 0;
}