Informatika gyűjtemény

Egy szinttel feljebb pr_robot.pas

2004050607080910

NézetNyomtat

pr_robot.pas (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
program robot;

var t1,t2:text;
db,i:longint;
x,y:array[1..10002] of integer;
d1,d2,d3:array[1..10002] of longint;
opt:array[1..10002] of longint;
ki:array[1..10002] of integer;

function max(a,b,c:longint):longint;
var l:longint;
begin l:=a; if b>then l:=b; if c>then l:=c; max:=l; end;

function min(a,b,c:longint):longint;
var l:longint;
begin l:=a; if b<then l:=b; if c<then l:=c; min:=l; end;

function mi(a,b,c:longint):longint;
var l:longint;
begin l:=a; if b<then l:=b; if c<then l:=c;
if l=then mi:=1; if l=then mi:=2; if l=then mi:=3; end;

begin
assign(t1,'robot.be'); reset(t1);
readln(t1,db); for i:=1 to db do readln(t1,x[i],y[i]); close(t1);

assign(t2,'robot.ki'); rewrite(t2);

if db>2 then begin


for i:=1 to db do d1[i]:=(x[i]+y[i]);
for i:=1 to db-1 do d2[i]:=max(x[i],x[i+1],0)+max(y[i],y[i+1],0);
for i:=1 to db-2 do d3[i]:=max(x[i],x[i+1],x[i+2])+max(y[i],y[i+1],y[i+2]);

opt[db]:=d1[db]; ki[db]:=1;
opt[db-1]:=d1[db-1]+opt[db]; ki[db-1]:=1;
if d2[db-1]<opt[db-1] then begin opt[db-1]:=d2[db-1]; ki[db-1]:=2 end;

for i:=db-2 downto 1 do begin
opt[i]:=min(d1[i]+opt[i+1],d2[i]+opt[i+2],d3[i]+opt[i+3]);
ki[i]:=mi(d1[i]+opt[i+1],d2[i]+opt[i+2],d3[i]+opt[i+3]);
end;

writeln(t2,opt[1]*2); i:=1; while i<=db do
begin write(t2,ki[i],' '); i:=ki[i]+i; end;


end else begin
if db=2 then writeln(t2,max(x[1],x[2],0)*2+max(y[1],y[2],0)*2);
if db=1 then writeln(t2,x[1]*2+y[1]*2); writeln(t2,db);
end;

close(t2);
end.
(Vissza)