A[i].number:=Num(A[i].part);


A[i].number:=Num(A[i].part); end; <сортировка А>; end; end; if (Rt<>[]) then One(t,Rt); Блок общих отсечений. Подсчитаем для каждого значения i (1?i?t) множество партий, представляемых жителями, номера которых записаны в элементах массива с i по t (массив С:array[1..N] of Sset). Тогда, если Res - текущее решение, а Rt - множество партий, требующих представления, то при Res+C[i]?Rt решение не может быть получено и эту ветку перебора следует “отсечь”. Формирование массива С. C[t]:=A[t].part; for i:=t-1 downto 1 do begin C[i]:=[];C[i]:=A[i].part+C[i+1]; end; Блок отсечений по i. Если при включении элемента с номером i в решение, значение величины Rt не изменяется, то это включение бессмысленно (A[i].part*Rt=[]). На этом мы закончим обсуждение этой, очень интересной с методической точки зрения, задачи. Заметим, что для любой вновь возникающей идеи по сокращению перебора место для ее реализации в логике определено. А именно, предобработка,
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz