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 на шаге
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа