public
koltov,gruz:integer;
massto,masves:array[1..1000]of integer;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
koltov:=strtoint(edit1.Text);
gruz:=strtoint(edit2.Text);
for i:=1 to koltov do
begin
masves:=strtoint(stringgrid1.cells[2,i]);
massto:=strtoint(stringgrid1.Cells[3,i]);
end;
showmessage(inttostr(Optium(gruz,koltov)));
end;
function TForm1.Optium(gruzkg,kol:integer):integer;
var
i,max,cost:integer;
const
k=2;
begin
if kol=1 then
begin
if masves[1]<=gruzkg then optium:=massto[1]
else optium:=0;
end
else begin
max:=0;
for i:=0 to k-1 do
begin
Cost:=i*massto[kol]+Optium((gruzkg-masves[kol])*i,kol-1);
if Cost>Max then Max:=Cost;
end;
end;
optium:=max;
end;
Задача о загрузке тс
отсюда функцию. Применил к своей программе эту функцию. Вроде заработала, а считает неправильно вот проверял по такой задаче:
m 11 17 23
p 20 36 48
Грузоподъемность=50
Три предмета где m-масса предмета, p-стоимость
Функция выдает результат 84, в действительности оптимальный набор такой (0,0,2) со стоимостью 96, не найду в чем причина?
Делаю курсовик по мат. методам, вот тема: 'Решение задачи о загрузке транспортного средства методом динамического программирования" (она же задача о рюкзаке). Т. е. нужно найти оптимальный набор предметов который по массе не превышал бы грузоподъемности траспортного средства, а по стоимости был максимальным, методом динамического программирования. Взял
m 11 17 23
p 20 36 48
Грузоподъемность=50
Три предмета где m-масса предмета, p-стоимость
Функция выдает результат 84, в действительности оптимальный набор такой (0,0,2) со стоимостью 96, не найду в чем причина?
Код: