我有一个如下所示的数组:
int[] numberArray = {9,2,1,5,6};
我想设计一个方法,它将整数作为参数并返回true / false,这取决于是否可以通过对该数组中的任何数字求和来实现该参数。
public boolean sumCheck (int sum) {
// ...
}
例如,如果sum
为5
,sumCheck
将从numberArray[3] == 5
返回true。如果sum
为12
,sumCheck
将从numberArray[0]+numberArray[1]+numberArray[2] == 12
开始返回true。但是,如果sum
为4
,则不会返回true,因为numberArray
元素的组合不能与此数字相加。
答案 0 :(得分:4)
这是subset sum问题,它是NP完全的。但是,您可以在Wiki页面上找到伪多项式时间算法(背包的变体,使用DP)。
答案 1 :(得分:1)
检查http://www.geeksforgeeks.org/dynamic-programming-subset-sum-problem/..it以一种很好的方式解释您的问题。第一个蛮力然后是dp解决方案就在那里。