Cod sursa(job #169177)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 1 aprilie 2008 12:57:29
Problema Ghiozdan Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.36 kb
program ghiozdan;
var  f,gg:text;
     a,b,aux,i,j,max,ia,n,g:longint;
     v,val,nr,p:array[1..20000] of longint;

procedure quick(s,d:integer);
     begin
       a:=s;
       b:=d;
       repeat
         while v[a]<v[b] do b:=b-1;
         aux:=v[a]; v[a]:=v[b]; v[b]:=aux;
         a:=a+1; ia:=1;
         if b>a then
            begin
              while v[a]<v[b] do a:=a+1;
              aux:=v[a]; v[a]:=v[b]; v[b]:=aux;
              b:=b-1; ia:=0;
            end;
       until b<=a;
       if s<a-ia then quick(s,a-ia);
       if d>a-ia+1 then quick(a-ia+1,d);
     end;

begin
assign(f,'ghiozdan.in'); reset(f); readln(f,n,g); for i:=1 to n do readln(f,v[i]); close(f);

quick(1,n);

p[n]:=0; val[n]:=v[n]; nr[n]:=1;
max:=val[n];
for i:=n-1 downto 1 do
   begin
     a:=0;
     for j:=i+1 to n do
        if (val[j]+v[i]<=g)and(val[j]+v[i]>a)  then begin a:=val[j]+v[i]; b:=j;end
            else if (val[j]+v[i]<=g)and(val[j]+v[i]=a)and(nr[j]<nr[b]) then b:=j;
     if a<>0 then begin val[i]:=a; nr[i]:=nr[b]+1; p[i]:=b; end
              else begin val[i]:=v[i]; nr[i]:=1; p[i]:=0;a:=v[i];end;
     if a>max then begin max:=a; aux:=i;end;
   end;

assign(gg,'ghiozdan.out'); rewrite(gg); writeln(gg,max,' ',nr[aux]);
writeln(gg,v[aux]) ;
i:=p[aux];
while i<>0 do
  begin
    writeln(gg,v[i]);
    i:=p[i];
  end;
close(gg);
end.