动态编程-查找公式

时间:2019-04-26 16:21:56

标签: java recursion dynamic-programming

我无知地试图解决这个问题:

  

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

我如何找到这个公式?我将不胜感激。

1 个答案:

答案 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