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

Обсуждение задачи 1210. Добрые духи

Why W. A. 5???? I cannot understand.++++++help please+++++++
Послано Виктор Крупко 15 апр 2005 17:45
var
   a:array[1..30,1..30,1..30] of integer;
   i,j,n,m,t:integer;
   otv:longint;
procedure profi(j1,i1:integer; sum:longint);
  var
  k:integer;
begin
  k:=1;
  if j1=n+1 then
   if sum<otv then otv:=sum
   else
  else
   while a[j1,i1,k]<>0 do
    begin
      profi(j1+1,k,sum+a[j1,i1,k]);
      inc(k);
    end;
end;
begin
   otv:=maxlongint;
   readln(n);
   for i:=1 to n do
   begin
    readln(m);
    for j:=1 to m do
      repeat
        read(t);
        if t=0 then readln
        else  read(a[i,t,j]);
      until t=0;
     if i<>n then readln;
   end;
  i:=1;
  while a[1,1,i]<>0 do
  begin
   profi(2,i,a[1,1,i]);
   inc(i);
  end;
  writeln(otv);
end.
help please
Послано Виктор Крупко 16 апр 2005 00:34
program de;
   var
   a:array[1..31,1..31,1..31] of integer;
   i,j,n,m,t:integer;
   otv:longint;
I have corrected the mistake but now TLE
Give me please idea as it is possible to reduce passes

procedure profi(j1,i1:integer; sum:longint);
  var
  k:integer;
begin
  if j1=n+1 then
   if sum<otv then otv:=sum
   else
  else
    for k:=1 to 31 do
    if (a[j1,i1,k]<>0) then
      profi(j1+1,k,sum+a[j1,i1,k]);
end;
begin
   otv:=maxlongint;
   readln(n);
   for i:=1 to n do
   begin
    readln(m);
    for j:=1 to m do
      repeat
        read(t);
        if t=0 then readln
        else  read(a[i,t,j]);
      until t=0;
     if i<>n then readln;
   end;
  i:=1;
  for i:=1 to 30 do
  IF a[1,1,i]<>0 THEN profi(2,i,a[1,1,i]);
  writeln(otv);
end.