где ki - целые (0?ki?[W/wi]),
где ki - целые (0?ki?[W/wi]), квадратные скобки означают целую часть числа.
Рассмотрим простой переборный вариант решения задачи, работоспособный только для небольших значений n (определить, для каких?). Итак, данные:
Сonst MaxN=????;
Var n,w:integer;{количество предметов, максимальный вес}
Weight,Price:array[1..MaxN] of integer;{вес, стоимость предметов}
Best,Now:array[1..MaxN] of integer;{наилучшее, текущее решения}
MaxPrice:LongInt;{наибольшая стоимость}
Решение, его основная часть - процедура перебора:
Procedure Rec(k,w:integer;st:LongInt);
{k - порядковый номер группы предметов, w - вес, который следует набрать из оставшихся предметов, st - стоимость текущего решения}
var i:integer;
begin
if (k>n) and (st>MaxPrice) then begin {найдено решение}
Best:=Now;MaxPrice:=st; end
else if k<=n then
for i:=0 to w div Weight[k] do begin
Now[k]:=i;
Rec(k+1,W-i*Weight[k],st+i*Price[k]);
end;
end;
Инициализация
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа