【发布时间】:2015-01-10 09:43:05
【问题描述】:
我有函数bool exists(int sum, vector<int>& vec)
它的作用是返回vec 中是否有任何等于sum 的数字序列。
例如
Vec = 140 80 90 180 70
sum = 300
函数返回true,因为序列140 90 70存在且等于300。
现在我有代码:
bool possible(int sum, vector<int> &vec)
{
do
{
int s = 0;
for (int i = 0; i < vec.size(); i++)
{
s += vec.at(i);
if (s == sum)
{
return true;
}
}
}while(next_permutation(vec.begin(), vec.end()));
return false;
}
即使矢量大小只有 20,它也可以工作,但需要的时间太长。
谁能帮我找到更好的方法?
【问题讨论】:
-
这个问题和subset sum一样难。
-
正如我所见,该任务需要大约 N!迭代。 20!是2,43*10^18,一般不会更快。
-
你能对数字进行排序吗?
-
我已经回滚了这个问题,因为您将代码更改为不同的算法。
标签: c++ algorithm vector sequences