ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Общий форум

What's wrong with my code(1119)? Is there any tricky data?
Послано Li Yi 10 окт 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.