Нужен алгоритм решения задачи о ранце(линейное программирование). Нужен ОЧЕНЬ быстрый алгоритм. Подозреваю, что таковым является метод ветвей и границ, но что это такое — не знаю. Есть вот такой алгоритм, но он слишком медленный:
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 — максимальная масса.
Может быть кто-нибудь улучшит этот алгоритм?