Cod sursa(job #186547)

Utilizator black_pussaasd sada black_puss Data 28 aprilie 2008 11:01:06
Problema Energii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.44 kb
program energii;
var f,g:text;
    e,c:array[1..1002]of longint;
    v:array[1..1002]of 0..1;
    n,i,w,min,energie,cost,ultim,aux:longint;

procedure ordonare;
var i,j,min1,min2,poz:longint;
begin
  for i:=1 to n-1 do
   begin
     min1:=e[i]; poz:=i; min2:=c[i];
     for j:=i+1 to n do
      if e[j]<min1 then
       begin
         min1:=e[j]; poz:=j; min2:=c[j];
       end;
     e[poz]:=e[i]; c[poz]:=c[i];
     e[i]:=min1;   c[i]:=min2;
   end;
end;

procedure bkt;
var i:longint;
begin
  if energie>=w then
   if cost<min then
    min:=cost else
     else begin
            for i:=1 to n do
             if (v[i]=0) and (e[i]<=ultim) and (cost+c[i]<min) then
              begin
                energie:=energie+e[i];
                cost:=cost+c[i];
                v[i]:=1;
                aux:=ultim;
                ultim:=e[i];
                bkt;
                energie:=energie-e[i];
                cost:=cost-c[i];
                v[i]:=0;
                ultim:=aux;
              end;
          end;
end;

begin
  assign(f,'energii.in');
  reset(f);
  readln(f,n);
  readln(f,w);
  min:=maxlongint;
  for i:=1 to n do
   begin
     readln(f,e[i],c[i]);
     if e[i]>=w then
      if c[i]<min then
       min:=c[i];
   end;
  ordonare;
  ultim:=maxlongint;
  bkt;
  assign(g,'energii.out');
  rewrite(g);
  if min<>maxlongint then
   write(g,min) else
   write(g,'-1');
  close(g);
end.