Pagini recente » Cod sursa (job #2527554) | Cod sursa (job #3294983) | Cod sursa (job #2419174) | Cod sursa (job #3176828) | Cod sursa (job #30582)
Cod sursa(job #30582)
program ghiozdan;
type rec=record
s,nr,xx:longint;
d:byte;
end;
var a,c:array[0..20000] of integer;
b:array[0..75000] of rec;
f,g:text; m,poz,n,max1,max,mx,i,j,k:longint;
procedure interclas(st,m,dr:longint);
var i,j,k,t:longint;
begin
for i:=st to dr do
c[i]:=a[i];
i:=st; k:=st; j:=m+1;
while (i<=m) and(j<=dr) do
if c[i]>c[j] then begin a[k]:=c[i]; inc(k); inc(i); end
else begin a[k]:=c[j]; inc(k); inc(j); end;
for t:=i to m do begin
a[k]:=c[t]; inc(k);
end;
for t:=j to dr do begin
a[k]:=c[t]; inc(k);
end;
end;
procedure mergesort(st,dr:longint);
var m:longint;
begin
if st<>dr then begin
m:=(st+dr) div 2;
mergesort(st,m);
mergesort(m+1,dr);
interclas(st,m,dr);
end;
end;
procedure afis(i:longint);
begin
if i>0 then begin
afis(b[i].d);
writeln(g,b[i].xx);
end;
end;
begin
assign(f,'ghiozdan.in'); reset(f);
assign(g,'ghiozdan.out'); rewrite(g);
readln(f,n,mx);
for i:=1 to n do read(f,a[i]);
mergesort(1,n);
b[1].s:=a[1]; max:=1; b[1].d:=0; b[1].nr:=1; b[1].xx:=a[1];
for i:=2 to n do
for j:=max downto 1 do
if (b[j].s+a[i]<=mx) then begin
b[max+1].s:=b[j].s+a[i]; b[max+1].d:=j;
b[max+1].xx:=a[i]; b[max+1].nr:=b[j].nr+1;
if b[j].s+a[i]>max1 then begin poz:=j+1; max1:=b[j].s+a[i]; end;
inc(max);
end;
writeln(g,max1,' ',b[poz].nr);
afis(poz);
close(f); close(g);
end.