设S为{1,2,4,5,10}
现在我想找到表示x作为集合S的K个数之和的方法的数量(一个数字可以包含任意次数)
如果x = 10且k = 3
然后ans应为2 => (5,4,1),(4,4,2) 数字的顺序并不重要,即(4,4,2)和(4,2,4)算作一个。
我做了一些研究,发现该集合可以表示为多项式x ^ 1 + x ^ 2 + x ^ 4 + x ^ 5 + x ^ 10,并且在将多项式提升到幂K之后,系数为乘积多项式给出了ans。
但是ans包括(4,4,2)和(4,2,4)作为我不想要的独特术语
有没有办法让(4,4,2)和(4,2,4)算作同一个词?
答案 0 :(得分:0)
这是NP-complete,是here所描述的和子集问题的变体。
坦率地说,我不认为你可以通过非指数(迭代但所有组合)解决方案解决它,对问题输入没有任何限制(例如最大数字范围等)。
对问题域没有任何限制,我建议迭代所有可能的k-set实例(如伪多项式时间动态编程解决方案中所述)并查看哪些是解决方案。< / p>
检查2个解决方案是否完全相同,这与整个算法的复杂性无关。因此,解决方案集元素的哈希将正常工作:
E.g。 hash-order-insensitive(4,4,2)==hash-order-insensitive(4,2,4)
=&gt;检查整个集合,否则解决方案是不同的。
PS:您还可以逐步描述当前的解决方案。