end; Var A:array[1..MaxN,0..M


end; Var A:array[1..MaxN,0..MaxK] of word; P:array[1..MaxN] of Thing; Old,NewA:array[0..MaxK] of longint; N,W:integer; ... procedure Solve; var k,i,j:integer; begin fillchar(Old,sizeof(Old),0); for k:=1 to N do begin{цикл по шагам} fillchar(NewA,sizeof(NewA),0); for i:=0 to W do {цикл по состояниям шага} for j:=0 to i div P[k].W do {цикл по вариантам решения - количеству предметов каждого вида} if j*P[k].V+Old[i-j*P[k].W]>=NewA[i] then begin NewA[i]:=j*P[k].V+Old[i-j*P[k].W]; A[k,i]:=j;{здесь j количество предметов?} end; Old:=NewA; end; end; Вывод наилучшего решения. procedure OutWay(k,l:integer); begin if k=0 then exit else begin OutWay(k-1,l-A[k,l]*P[k].V);{а здесь вес} Write(A[k,l],’ ‘); end; end; Первый вызов - OutWay(N,W). Эту схему реализации принято называть «прямой прогонкой». Ее можно изменить. Пусть пункт два формализации задачи звучит следующим образом. Состояние yi на шаге
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz