Очень надо.
От: Keith  
Дата: 21.03.03 23:03
Оценка:
Нужен алгоритм решения задачи о ранце(линейное программирование). Нужен ОЧЕНЬ быстрый алгоритм. Подозреваю, что таковым является метод ветвей и границ, но что это такое — не знаю. Есть вот такой алгоритм, но он слишком медленный:
void f()
{
  for (int i=deep++;i<n;i++)
  {
    if (in[i]==0)
    {
      if (mass[i]+currentm<=m)
      {
    in[i]=1;
    currentm+=mass[i];
    currentp+=price[i];
    f();
    if (currentp>bestprice)
    {
      bestprice=currentp;
      memcpy (bestin,in,sizeof (char)*n);
    }
    in[i]=0;
    currentp-=price[i];
    currentm-=mass[i];
    deep--;
      }
    }
  }
}

где bestprice — это лучшая цена, а bestin — массив тех предметов, которые надо брать.
mass и prise массивы соответственно масс и цен. n — максимальное число предметов, а m — максимальная масса.
Может быть кто-нибудь улучшит этот алгоритм?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.