Cod sursa(job #27890)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 7 martie 2007 11:29:25
Problema Energii Scor 5
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.42 kb
program Energi;
var eg,cg:array[1..1002]of integer;
    n,w,min,p:integer;
    f:text;
procedure Citeste;
var i:integer;
begin
assign(f,'energii.in');reset(f);
readln(f,n);
readln(f,w);
for i:=1 to n do readln(f,eg[i],cg[i]);
close(f);
end;
procedure switch(var x,y:integer);
var aux:integer;
begin
aux:=x;x:=y;y:=aux;
end;
procedure Pivot(lo,hi:integer;var k:integer);
var d,i,j:integer;
begin
i:=lo;j:=hi;d:=0;
while i<j do begin
             if cg[i]>cg[j] then begin
                                 switch(cg[i],cg[j]);
                                 switch(eg[i],eg[i]);
                                 d:=1-d;
                                 end;
             inc(i,d);dec(j,1-d);
             end;
k:=i;
end;
procedure Quick(st,fi:integer);
var k:integer;
begin
if st<fi then begin
              Pivot(st,fi,k);
              Quick(st,k-1);
              Quick(k+1,fi);
              end;
end;
procedure Rezolva;
var i,j:integer;
begin
min:=0;p:=0;
for i:=1 to n do
  begin
  min:=min+cg[i];
  p:=p+eg[i];
  if p>w then
   for j:=i-1 downto 1 do if eg[j]<=p-w then begin
                                            p:=p-eg[j];
                                            min:=min-cg[j];
                                             end;
  end;
assign(f,'energii.out');rewrite(f);
if p<w then write(f,-1) else write(f,min);
close(f);
end;
begin
Citeste;
Quick(1,n);
Rezolva;
end.