好文拖回来慢慢看。
思路
最大连续子序列乘积和最大连续子序列和不同,这里先回忆一下最大连续子序列和的最优解结构:
最大连续子序列和
我们用sum[i]来表示以arr[i]结尾的最大连续子序列和,则状态转移方程为:
最大连续子序列乘积
考虑存在负数的情况(ps:负负会得正),因此我们用两个辅助数组,max[i]和min[i],max[i]来表示以arr[i]结尾的最大连续子序列乘积,min[i]来表示以arr[i]结尾的最小连续子序列乘积,因此状态转移方程为:
and
最后打印出最大的max[i]就行。
答疑:
--为什么要用一个数组min[]?
--因为会存在负数,min[]就是为了找到负数中最小的,这样再乘上一个负数后就变成了一个较大的正数。