2015-05-29 2 views
1

у меня есть массив таким образом, как показано ниже:Найти сумму от комбинации элементов массива

int[] numberArray = {9,2,1,5,6}; 

Я хочу разработать метод, который будет принимать целое число в качестве аргумента и возвращает истину/ложь в зависимости, если аргумент может быть достигается суммированием любого из чисел в этом массиве.

public boolean sumCheck (int sum) { 
    // ... 
} 

Например, если sum были 5, sumCheck вернется верно, так как numberArray[3] == 5. Если sum были 12, sumCheck вернётся с numberArray[0]+numberArray[1]+numberArray[2] == 12. Однако это не вернет истину, если sum были 4, так как никакая комбинация из numberArray элементов не может суммироваться с этим числом.

ответ

4

Это проблема subset sum, которая NP-complete. Тем не менее, вы можете найти псевдополиномиальный алгоритм времени (вариант рюкзака, используя DP) на странице Wiki.

Смежные вопросы