我有N个不同的项目,整数重量和一个重量容量为K的包。
在' normal'背包问题项目也有一个值,目标是找到可以带走的项目的最大值。相反,我想找到可以携带的事物的可能组合的数量。
我的代码产生正确的输出,但效率非常低(例如,有25个项目可以同时放入包中,有33,554,432个函数调用)。有没有办法让这个过程更快?
void possibleSets(vector<int> items, int capacity, long int &count)
{
// Look at the first item in the list
int currentItem = items.at(0);
// If that first item in the list could fit in your bag then +1 count
if (capacity - currentItem > -1){
count++;
}
if (items.size() == 1){ // No more combinations left to try
return;
}
else {
items.erase(items.begin());
// Recursive call 1:
// Ignore that first item, and try the rest of the list
possibleSets(items, capacity, count);
// Recursive call 2:
// Put that first item in your bag, then try the rest of the list
capacity -= currentItem;
if (capacity > -1){
possibleSets(items, capacity, count);
}
}
}