设计一种算法,给定一组n个整数和另一个整数 整数x,确定是否存在k(n> k> 2)个元素 S的总和恰好是x。请给你的运行时间 算法
我一直在准备面试,我遇到过这个算法。我已经解决了问题中指定了k的问题。像2或3.但我找不到答案,我可以解决任何可能存在的k。我尝试使用动态编程解决它,但没有得到结果。任何人都可以帮助我。
答案 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