Простая формула повторения, основанная на вашем определении M[s][i]
, будет иметь вид:
M[s][i] = M[s][i-1] || M[s-arr[i]][i-1]
Пояснение
- Если
arr[i]
не включенов подмножестве M[s][i]
равно true
, если существует подмножество первых i-1
элементов, сумма которых точно равна s
. - Если
arr[i]
включено в подмножество,M[s][i]
может быть true
, только если существует подмножество первых i - 1
элементов, которое имеет подмножество, точно равное s - arr[i]
.
Эта проблема обычно называется Задача подмножества сумм .Здесь уже есть несколько ответов здесь