Pagini recente » Cod sursa (job #2295522) | Cod sursa (job #576526) | Cod sursa (job #3237870) | Cod sursa (job #1646081) | Cod sursa (job #27904)
Cod sursa(job #27904)
program Energi;
var eg,cg:array[1..1002]of integer;
a:array[1..1002]of 0..1;
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;
fillchar(a,sizeof(a),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 a[j]=0 then
if eg[j]<=p-w then begin
p:=p-eg[j];
min:=min-cg[j];
a[j]:=1;
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.