What's wrong with my code(1119)? Is there any tricky data?
Posted by
Li Yi 10 Oct 2001 18:54
I use 'dynamic programming' to solve it.
===========================================================
var
n, m, k : integer;
d : array[0..1, 0..1000]of real;
ps : array[1..100, 1..2]of integer;
procedure init;
var i : integer;
begin
readln(n, m);
readln(k);
for i := 1 to k do
readln(ps[i, 1], ps[i, 2]);
end;
function dia_able(x, y : integer) : boolean;
var i : integer;
begin
for i := 1 to k do
if (ps[i, 1] = x) and (ps[i, 2] = y) then
begin
dia_able := true;
exit;
end;
dia_able := false;
end;
procedure main;
var i, j, p1, p2 : integer;
begin
d[1, 0] := 0;
for i := 1 to m do d[1, i] := d[1, i - 1] + 100;
p2 := 1;
for i := 1 to n do
begin
p1 := p2; p2 := 1 - p2;
for j := 0 to m do
if j > 0 then
if dia_able(i, j) then
begin
d[p2, j] := d[p1, j - 1] + 100 * sqrt(2);
if d[p1, j] + 100 < d[p2, j] then d[p2, j] := d
[p1, j];
if d[p2, j - 1] + 100 < d[p2, j] then d[p2,
j] := d[p2, j - 1];
end
else
begin
if d[p1, j] > d[p2, j - 1] then
d[p2, j] := d[p2, j - 1] + 100
else
d[p2, j] := d[p1, j] + 100
end
else
d[p2, j] := d[p1, j] + 100;
end;
writeln(d[p2, m] : 0 : 0);
end;
begin
init;
main;
end.