Поскольку проблема не нова и существует множество алгоритмов, которые ее решают, я предположил, что вопрос может дублироваться, но я не нашел ни одного.
Существует набор элементов.Задача состоит в том, чтобы найти подмножество с суммой, равной некоторой s
переменной.
Примитивное решение является простым и может быть решено за экспоненциальное время.В рекурсивном подходе DP предлагается добавить памятку, чтобы уменьшить сложность или работать с двумерным массивом (снизу вверх).
Я нашел еще один в комментарии к geeksforgeeks, но не могу понять, как он работает.
def is_subset_sum(a, s):
n = len(a)
res = [False] * (s + 1)
res[0] = True
for j in range(n):
i = s
while i >= a[j]:
res[i] = res[i] or res[i - a[j]]
i -= 1
return(res[s])
Может кто-нибудь объяснить алгоритм?Что элементы массива на самом деле имеют в виду?Я пытаюсь отследить это, но не могу с этим справиться