希望创建一个动态编程算法,该算法确定具有最大总和的序列(正整数)的子序列。唯一的规定是,如果子序列包含序列中的任何连续元素,则这两个数字的总和是奇数(两个数字具有不同的奇偶校验)。
答案 0 :(得分:0)
首先根据奇偶校验是变化还是保持相同,将序列分成(连续元素的)子序列。例如,考虑序列:1,2,3,4,6,8,4,2,9,6 ,3比后续的是:
1)1,2,3
2)4,6,8,4,2
3)9,6,3
现在可以采用1和3的所有元素(即更改奇偶校验),因为它们对于选择任何其他数字没有任何问题。
现在问题归结为从2)这样的序列中选择非连续元素并且具有最大总和。让a1,a2 ..现在假定的序列比a1和a2都不存在于最后的子序列中。但是我们可以通过将a1导致矛盾来增加总和,因为我们假设我们的子序列具有最大总和。因此最终子序列必须包含a1或a2。
让p(1,n)代表序列a1,a2..an 然后maxsum(l(1,n))= max(a1 + maxsum(l(3,n)),a2 + maxsum(l(4,n))) memoization应用于maxsum(l(x,n))