Cod sursa(job #699290)

Utilizator amaliutzzaGoia Amalia amaliutzza Data 29 februarie 2012 18:41:56
Problema Problema rucsacului Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.54 kb
program rucsac;

var fi,fo:text;
    castig:array[0..5000,0..5000]of integer;
    alege:array[0..5000,0..5000]of integer;
    n,g:integer;
    gr,c:array[1..5000]of integer;

  procedure citiredate;
  var i:integer;
  begin
      readln(fi,n,g);
      for i:=1 to n do
        begin
            read(fi,gr[i],c[i]);
        end;
  end;



  procedure dinamique;
  var i,j:integer;
  begin
      for i:=1 to n do
        for j:=1 to g do
          if j>=gr[i] then
            begin
                if castig[i-1,j]<castig[i-1, j-gr[i]]+c[i] then
                  begin
                      castig[i,j]:=castig[i-1,j-gr[i]]+c[i];
                      alege[i,j]:=i;
                  end
                else
                  begin
                      castig[i,j]:=castig[i-1,j];
                      alege[i,j]:=alege[i-1,j];
                  end;
            end
          else
            begin
                 castig[i,j]:=castig[i-1,j];
                 alege[i,j]:=alege[i-1,j];
            end;
      writeln(Fo, castig[n,g]);

  end;

  procedure drum;
  var i,j:integer;
  begin
      i:=n; j:=g;
      while alege[i,j]<>0 do
        begin
            writeln('ob. ',alege[i,j], ' cu greut. ', gr[alege[i,j]], ' si castigul ', c[alege[i,j]]);

            j:=j-gr[alege[i,j]];
            i:=i-1;
        end;
  end;


begin
    assign(fi,'rucsac.in'); reset(fi);
    assign(fo,'rucsac.out'); rewrite(fo);

      citiredate;

      dinamique;

      drum;

    close(fi); close(Fo);
end.