Cod sursa(job #572756)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 5 aprilie 2011 16:35:11
Problema Energii Scor 5
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.54 kb
var ct, et:array [-1..1001, 1..1001] of longint;
    e, c:array [1..1001] of longint;
    i, j, m, n, t, min, aux, k, r:longint;
    buf1:array [1.. 1 shl 17] of char;
    ok:boolean;
    f, g:text;

procedure qsort (st, dr:longint);
var s, d, p:longint;
  begin
  if dr-st>=1 then
    begin
    s:=st; d:=dr;
    p:= e[random (dr-st)+st];
    while s< d do
      begin
      while e[s]<p do s:=s+1;
      while e[d]>p do d:=d-1;
      if s<=d then
        begin
        aux:=e[s]; e[s]:=e[d]; e[d]:=aux;
        aux:=c[s]; c[s]:=c[d]; c[d]:=aux;
        s:=s+1; d:=d-1;
        end;
      end;
    if st<d then qsort (st, d);
    if s<dr then qsort (s, dr);
    end;
  end;


begin
assign (f, 'energii.in'); settextbuf (f, buf1); reset (F);
assign (g, 'energii.out'); rewrite (g);

readln (f, n);
readln (f, t);
for i := 1 to n do
  begin
  readln (f, e[i], c[i]);
  end;

qsort (1, n);

for i := 1 to n-1 do
  begin
  for j := i+1 to n do
    begin
    if e[i] < e[j] then
      begin
      aux:=e[i]; e[i]:=e[j]; e[j]:=aux;
      aux:=c[i]; c[i]:=c[j]; c[j]:=aux;
      end;
    end;
  end;

j:=1; i:=0;
min:=maxlongint;
while (i <= n-1) and (j<=n) do
  begin
  k:=j;
  ok:=true;
  while k <= n do
    begin
    ct[i, k]:=ct[i-1, k]+c[k];
    et[i, k]:=et[i-1, k]+e[k];
    if et[i, k]>=t then
      begin
      j:=k+1;
      ok:=false;
      if ct[i, k]< min then min := ct[i, k];
      end;
    k:=k+1;
    end;
  if ok then j:=j+1;
  i:=i+1;
  end;

writeln (g, min);
close (f); close (g);
end.