最大和和最大积连续子序列

来源:互联网 发布:JAVA中异或如何用 编辑:程序博客网 时间:2024/06/05 01:57

经典的动态规划题目:

 

对于一个包含了正负整数的数组,求其“最大和”连续子序列 以及 “最大积”连续子序列

比如:

3 -4 8 -5 2 6 -7

最大和子序列是:8 -5 2 6,和为11

最大积子序列是:3 -4 8 -5 2 6,积自己算:)

 
  1. 对于最大和问题:
    我们令F(n)表示[0,n]区间内以d[n]为结尾的最大和,d为原序列,那么有:
    F(n + 1) = Max{d[n + 1],F(n) + d[n + 1]} = d[n + 1] + Max{0, F(n)}

  2. 对于最大积问题:
    由于负数的存在,我们不能简简单单只存一个当前最大值,我们还需要存当前最小值。
    我们令F(n)表示[0,n]区间内以d[n]为结尾的最大积,令G(n)表示[0,n]区间内以d[n]为结尾的最小积,d为原序列,那么有:
    F(n + 1) = Max{F(n) * d[n + 1], d[n + 1], G(n) * d[n + 1]}
    G(n + 1) = Min{F(n) * d[n + 1], d[n + 1], G(n) * d[n + 1]}

原创粉丝点击