数组中任何k个元素的数字之和

时间:2014-10-17 17:40:44

标签: algorithm subset subset-sum

  

设计一种算法,给定一组n个整数和另一个整数   整数x,确定是否存在k(n> k> 2)个元素   S的总和恰好是x。请给你的运行时间   算法

我一直在准备面试,我遇到过这个算法。我已经解决了问题中指定了k的问题。像2或3.但我找不到答案,我可以解决任何可能存在的k。我尝试使用动态编程解决它,但没有得到结果。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:3)

您可以制作尺寸为int的{​​{1}}数组cnt,然后浏览该集,并标记可到达的点。 x的所有元素最初都设置为cnt,但元素零除外,它被设置为零。

-1的每个元素si重复相同的过程:对于位置为S的非负数的cnt的每个元素,请检查元素{{1} (如果它在数组的范围内)。如果是,请将其设置为i

完成cnt[i+si]的所有元素后,请检查cnt[si+i] = max(cnt[i]+1, cnt[si+i])。如果设置为两个或更多,则S中存在两个或多个元素的组合,最多为cnt[x]

该算法是伪多项式,运行时间为S