Algorithm 非连续元素的最大和(动态规划)

Algorithm 非连续元素的最大和(动态规划),algorithm,dynamic-programming,Algorithm,Dynamic Programming,给定一个正整数数组,效率最高的是什么 从该数组中查找非连续元素的算法 加在一起,产生最大的总和 动态规划解决方案是使用一个辅助数组maxSum,在该特定索引之前保持最大总和。我们首先设置数组的前2个索引,然后用max(数组[i]+maxSum[i-2],maxSum[i-1])填充数组的其余部分 我知道我们不能添加相邻元素,但我很难理解上述解决方案如何考虑到maxSum[I]中的前一个元素可能不是使用array[I]求和的结果 例如: index: 0 1 2 3 4 array: 3

给定一个正整数数组,效率最高的是什么 从该数组中查找非连续元素的算法 加在一起,产生最大的总和

动态规划解决方案是使用一个辅助数组
maxSum
,在该特定索引之前保持最大总和。我们首先设置数组的前2个索引,然后用
max(数组[i]+maxSum[i-2],maxSum[i-1])
填充数组的其余部分


我知道我们不能添加相邻元素,但我很难理解上述解决方案如何考虑到
maxSum[I]
中的前一个元素可能不是使用
array[I]
求和的结果

例如:

index:  0 1 2  3 4

array:  3 5 -7 8 10

maxSum: 3 5 5  _ 
我们看到maxSum[2]不是数组[2]求和的结果


查找<代码> Max和[3 ] = MAX(数组[3 ] + Max和[1 ],Max和[2 ])< /C>,但是我们为什么不考虑<代码> Max和[2 ] +数组[3 ] < /代码>?由于maxSum[2]可能不包含相邻的数组[2]值。

首先,您可能无法完全理解该过程:

  • 对于每个索引i,
    maxSum
    表示的
    max
    (通过包括第i个元素求和,通过排除第i个元素求和)
  • maxSum[3]=max(数组[3]+maxSum[1],maxSum[2])
    ,因为
    array[3]+maxSum[1]
    表示采用
    array[3]
    时的和,而
    maxSum[2]
    表示排除
    array[3]
    时的和

    • 我想你需要解释一下原因,就在这里

      设M[i]是通过包含数组A的第一个i元素(条件是没有两个元素是连续的)可以获得的最大和。有两种可能性:

    • M[i]包括元素i。在这种情况下,它不能包括元素i-1 所以M[i]=A[i]+M[i-2]

    • M[i]不包括元素i。在这种情况下,M[i]=M[i-1]

    • 因为我们不知道它是否真的包含i,所以我们计算这两种情况,并在两者之间选择最大值

      M[i]=max(M[i-1],A[i]+M[i-2])

      上述解决方案如何考虑maxSum[i]中的前一个元素可能不是与数组[i]求和的结果

      很简单。如果maxSum[i]中的前一个元素不包括在与数组[i]求和的结果中,我们可以查看maxSum[i-2]。我们明确地在

      我们将其与不包括数组[i]的选项进行比较,后者是

      maxSum[i-1]
      

      1.我知道这是一项任务,但为什么在现实世界中会有人想要这个呢?2.在你的例子中,最大和是15吗?3.一种方法是找到前3个值并比较它们的索引,一种更简单的方法是:for(i=0;i@iAmOren我在练习一个面试问题,而不是同样的任务…我的其他建议呢?感谢你花时间阅读/理解我的问题
      maxSum[i-1]