Informatika gyűjtemény

Egy szinttel feljebb fg_kemence.dpr

2004050607080910

NézetNyomtat

fg_kemence.dpr (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
{$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 CONSOLE}
PROGRAM kemence;
USES SysUtils;
CONST
    ch = '7';
    inputFile = 'KEMENCE'+ch+'.BE';
    outputFile = 'KEMENCE'+ch+'.KIX';
    maxn = 10000;

VAR
    N, K: INTEGER;
    list: ARRAY [1..maxn] OF RECORD
        E: BYTE;
        S: SMALLINT; {*}
    END;

    cache: ARRAY [1..maxn+1] OF LONGINT;
    choice: ARRAY [1..maxn] OF SMALLINT;

PROCEDURE Load;
VAR
    T: Text;
    i: INTEGER;
BEGIN
    Assign(T, inputFile);
    Reset(T);
    ReadLn(T, N, K);
    FOR i:= 1 TO N DO
    BEGIN
        ReadLn(T, list[i].S, list[i].e); {*}
    END;
    Close(T);
END; {Load}

FUNCTION Best(elso_targy: INTEGER): LONGINT;
VAR
    i: INTEGER;
    max: LONGINT; {a berakott targyak e. ideje}
    ido: LONGINT; {max + a maradek targyak e. ideje}
    tmp: INTEGER;
    s: INTEGER; {*} {a kemencebe kerulo targyak sulya}
BEGIN
    cache[elso_targy]:= -1;
    max:= 0; s:= 0; {*}
    tmp:= elso_targy+K-1;
    IF tmp > N THEN tmp:= N;
    FOR i:= elso_targy TO tmp DO
    BEGIN
        s:= s+list[i].s; {*} {a kemencebe kerulo targyak sulya...}
        IF > K THEN BREAK; {*}
        IF list[i].> max THEN max:= list[i].e; {...es egetesi edeje}
        ido:= max + cache[i+1];
        IF (cache[elso_targy] = -1) OR (ido < cache[elso_targy]) THEN
        BEGIN
            cache[elso_targy]:= ido;
            choice[elso_targy]:= i-elso_targy+1;
        END;
    END;
    Best:= cache[elso_targy];
END; {Best}

PROCEDURE Process;
VAR
    T: Text;
    i: INTEGER;
BEGIN
    Assign(T, outputFile);
    Rewrite(T);
    cache[N+1]:= 0;
    FOR i:= N DOWNTO 1 DO Best(i);
    WriteLn(T, cache[1]);
    i:= 1;
    WHILE i <= N DO
    BEGIN
        WriteLn(T, i, ' ', i+choice[i]-1);
        i:= i+choice[i];
    END;
    Close(T);
END; {Process}

BEGIN
    Load;
    Process;
END.
(Vissza)