Programozás‎ > ‎Feladatok‎ > ‎Fazekas‎ > ‎Megoldás‎ > ‎

ep_fazekas.dpr

Letöltés: ep_fazekas.dpr

{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q+,R+,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
program fazekas2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
        ch = '2';
        inputFile = 'FAZEKAS'+ch+'.BE';
        outputFile = 'FAZEKAS'+ch+'.KI';
        realOutput = 'FAZEKAS'+ch+'.KIX';

        maxn = 10000;
var
        N,K : integer;
        list : Array[1..maxn] of Record e:Byte; End;
        cache : Array[1..maxn+1] of Longint;
        choice : Array[1..maxn+1] of Longint;
        j : Integer;

procedure load;
var
        T : Text;
        i : integer;
begin
        assign(T, inputfile);
        reset(T);
        readln(T,N,K);
        for i:= 1 To N Do readln(T,List[i].e);
        Close(T);
        for i:=1 To maxn+1 Do cache[i] := 0;
        for i := 1 To maxn+1 Do choice[i] := 0;
End;

Procedure best(et:longint);
var min:Longint;
    ido:Longint;
    max:Longint;
    i : Longint;
    v : Longint;
begin
    min := -1;
    max := 0;
    v := et+k-1; If v>n Then v:= n;
    For i := et To v Do
    Begin
        if list[i].e > max Then max := list[i].e;
        ido := max+cache[i+1];
        if (ido < min) or (min=-1) then
        begin
                min := ido;
                choice[et] := i;
        end;
    End;
    cache[et] := min;
end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  load;
  cache[N+1]:=0;
  For j := N DownTo 1 Do best(j);

  writeln(cache[1]);
  j := 1;
  Writeln(j,' ',choice[j]);
  While choice[j] < n do
  begin
        j := choice[j]+1;
        writeln(j,' ',choice[j]);
  end;
  readln;
end.
ċ
ep_fazekas.dpr
(2k)
Gábor Fehér,
2012. márc. 4. 8:22
Comments