我无知地试图解决这个问题:
让
arr
为长度为n
(从1到n的索引)的整数数组。让
M[s][i]
为包含布尔值的矩阵,如果存在数组arr(arr [1],arr [2],...,arr [i],...,arr [n]),其总和恰好是i
。基于
s
查找M[s][i]
值的递归公式,其中j M[?][j]包含arr
。您可以假设j
。
我如何找到这个公式?我将不胜感激。
答案 0 :(得分:0)
根据您对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]
完全相等。此问题通常称为子集总和问题。它已经有多个答案here