Cod sursa(job #1414841)

Utilizator PetruZZatic Petru PetruZ Data 3 aprilie 2015 09:18:49
Problema Energii Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.11 kb
Program Energii;
    var buf1, buf2 : array[1..1 shl 17] of char;
        n, e, i, j : longint;
        w, p : array [1..10000] of longint;
        zer, un : integer;
        a : array [0..1, 0..10000] of longint;
        fi, fo : text;

function min(a,b:longint):longint;
 begin

     if a<b then min:=a else min:=b;

 end;

procedure swap(var a,b:integer);
    var x : integer;
    begin x:=a;
          a:=b;
          b:=x;
    end;

begin
 settextbuf(fi,buf1);
 settextbuf(fo,buf2);
 zer:=0; un:=1;
 assign(fi,'energii.in'); reset(fi);
 assign(fo,'energii.out'); rewrite(fo);
 readln(fi,n);
 readln(fi,e);
 for i:=0 to 1 do
  for j:=0 to e do a[i,j]:=1 shl 30;
 for i:=1 to n do readln(fi,w[i],p[i]);

 for i:=1 to n do begin
                  for j:=1 to e do if w[i]>=j then a[un,j]:=min(a[zer,j],p[i])
                                              else a[un,j]:=min(a[zer,j-w[i]]+p[i],a[zer,j]);
                  swap(zer,un);
                  end;

 if min(a[zer,e],a[un,e])=1shl 30 then writeln(fo,'-1')else
 writeln(fo,min(a[zer,e],a[un,e]));


 close(fi);
 close(fo);
end.