Cod sursa(job #1374888)

Utilizator kor663Docolin Alexandru kor663 Data 5 martie 2015 11:13:54
Problema Energii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.63 kb
type sir= array [1..1001] of integer;
var put,cost: sir;
    n,p,cost1,cost2,put1,put2: integer;
    ok: boolean;


procedure citire(var put,cost: sir; var n,p: integer);
var f: text;
    i: integer;
begin
    assign(f,'energii.in'); reset(f);
    readln(f,n);
    readln(f,p);
    for i:= 1 to n do readln(f,put[i],cost[i]);
    close(f);
end;

function verif: boolean;
var i: integer;
    s: qword;
begin
    verif:=false;
    for i:= 1 to n do
        s:= s+put[i];
    if s>p then verif:=true;
end;


procedure tip(cost1: integer);
var f: text;
begin
    assign(f,'energii.out'); rewrite(f);
    writeln(f,cost1);
    close(f);
end;


procedure rezolv(var put,cost: sir; var n,p,cost1: integer);
var cost2,put1,put2,i,j: integer;
begin
    cost2:=0; put2:=0;
   repeat
    cost1:=0; put1:=0;
    for i:= 1 to n do
        if (put[i]>put1) then       begin
                                     j:=i;
                                     put1:=put[j];
                                     cost1:=cost[j];
                                     end
        else if (put[i]=put1) and (cost[i]<cost1) then begin
                                                       j:=i;
                                                       put1:=put[j];
                                                       cost1:=cost[j];
                                                       end;
    cost2:=cost2+cost1;
    put2:=put2+put1;
    put[j]:=-1;
    cost[j]:=-1;
   until put2>=p;
   tip(cost2);
end;




begin{pp}
citire(put,cost,n,p);
ok:=verif;
if not ok then tip(-1) else rezolv(put,cost,n,p,cost1);
end.