Вы можете попытаться обработать рекурсивно:
С учетом отсортированного массива X = {x1 ... xn} xi! = 0 и целого числа N.
Сначала найдите все возможности, "сделанные" только одним элементом:
здесь, если N = xp, исключить все xi s.t i> = p
секунда найти все возможности, сделанные с 2 элементами:
{(x1, x2) .... (xp-2, xp-1)}
Сортировка по сумме и исключение всех сумм> = N
и у вас были правила: xi не может идти с xj, когда xi + xj> = N
Третий с 3 элементами:
Вы создаете все части, которые соблюдают вышеуказанное правило.
И то же самое, шаг 2
и т.д ...
Пример:
X={1,2,4,7,9,10} N=9
step one:
{9}
X'={1,2,4,7,9}
step 2: cannot chose 9 and 10
X={(1,2) (1,4) (2,4) (1,7) (2,7) (4,7)}
{2,7}
X'={(1,2) (1,4) (2,4) (1,7)}
step 3: 4 and 2 cannot go with 7:
X={(1,2,4)}
no sol
{9} {2,7} are the only solutions
Это уменьшает общее количество сравнений (которое будет 2 ^ n = 2 ^ 6 = 64), которое вы только что сделали: 12 сравнений
надеюсь, это поможет