最大连续子序列乘积

2014-11-23 22:26:02 ? 作者: ? 浏览: 4
问题描述
给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为720,即3*(-4)*(-5)*6=720。
分析
求最大连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0。
假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来表示以a[i]结尾的最大连续子序列的乘积值,用Min[i]表示以a[i]结尾的最小的连续子序列的乘积值,那么状态转移方程为:
Max[i]=max{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
Min[i]=min{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
初始状态为Max[0]=Min[0]=a[0]。代码如下:
#include"iostream"      
using namespace std;      
  
int max3(int a,int b,int c)  
{  
    int t = a>b a:b;  
    return t>c t:c;  
}  
  
int min3(int a,int b,int c)  
{  
    int t = a 
  


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: