Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача о загрузке тс

47K
30 марта 2009 года
Klife
1 / / 30.03.2009
Делаю курсовик по мат. методам, вот тема: 'Решение задачи о загрузке транспортного средства методом динамического программирования" (она же задача о рюкзаке). Т. е. нужно найти оптимальный набор предметов который по массе не превышал бы грузоподъемности траспортного средства, а по стоимости был максимальным, методом динамического программирования. Взял отсюда функцию. Применил к своей программе эту функцию. Вроде заработала, а считает неправильно вот проверял по такой задаче:

m 11 17 23
p 20 36 48
Грузоподъемность=50
Три предмета где m-масса предмета, p-стоимость


Функция выдает результат 84, в действительности оптимальный набор такой (0,0,2) со стоимостью 96, не найду в чем причина?
Код:
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;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог