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

Обсуждение задачи 1029. Министерство

Strange.. OLE at #15...
Послано Agnimon 15 июн 2007 16:39
So anyone has the same problem as mine..?
program dafen;
const
  maxm=100;
  maxn=500;
var
  i,m,n,j,mini:integer;
  min:longint;
  f,w:array[1..maxm,1..maxn] of longint;
  g:array[1..maxm,1..maxn] of 0..3; {1:from downstair; 2:from the left; 3:from the right}

begin
  readln(m,n);
  for i:=m downto 1 do
    for j:=1 to n do
      read(w[i,j]);
  fillchar(f,sizeof(f),127);
  for i:=1 to n do f[1,i]:=w[1,i];
  for i:=2 to m do begin
    {left to right}
    f[i,1]:=f[i-1,1]+w[i,1];
    g[i,1]:=1;
    for j:=2 to n do begin
      if f[i,j]>f[i-1,j]+w[i,j] then begin
        f[i,j]:=f[i-1,j]+w[i,j];
        g[i,j]:=1;
      end;
      if f[i,j]>f[i,j-1]+w[i,j] then begin
        f[i,j]:=f[i,j-1]+w[i,j];
        g[i,j]:=2;
      end;
    end;
    {right to left}
    if f[i,n]>f[i-1,n]+w[i,n] then begin
      f[i,n]:=f[i-1,n]+w[i,n];
      g[i,n]:=1;
    end;
    for j:=n-1 downto 1 do begin
      if f[i,j]>f[i,j+1]+w[i,j] then begin
        f[i,j]:=f[i,j+1]+w[i,j];
        g[i,j]:=3;
      end;
    end;
  end;
  min:=maxlongint;
  for i:=1 to n do begin
    if f[m,i]<min then begin
      min:=f[m,i];
      mini:=i;
    end;
  end;
  i:=m;
  j:=mini;
  while not(i=1) do begin
    writeln(j);
    case g[i,j] of
    1:dec(i);
    2:dec(j);
    3:inc(j);
    end;
  end;
  writeln(j);
end.
Re: Strange.. OLE at #15...
Послано Agnimon 15 июн 2007 21:36
Err, the problem solved by increasing array bounds to 200*600, and change longint to double= =...
evil datas..