#include <iostream>
using namespace std;
//最大子段和
double MaxSubSum(double *p,const int n);
double MaxSubMutil(double *p,const int n);
int main()
{
double p[]={1,-2,-3,4,-5,6,-7};
cout<<MaxSubMutil(p,7)<<endl;
cout<<MaxSubSum(p,7)<<endl;
return 0;
}
double MaxSubSum(double *p,const int n)
{
double sum=p[0];
double max=p[0];
for (int i=1;i<n;++i)
{
max=max>0 ? max+p[i] :p[i];
sum=sum>max ? sum :max;
}
return sum;
}
double MaxSubMutil(double *p,const int n)
{
double mutil=p[0];
double max=p[0];
double min=p[0];
double maxTemp=p[0];
double minTemp=p[0];
for (int i=1;i<n;++i)
{
if (p[i]>0)
{
//maxTemp=max*p[i]>p[i] ? max*p[i] : p[i];
maxTemp=max>1 ? max*p[i] : p[i];
//minTemp=min*p[i]<p[i] ? min*p[i]:p[i];
minTemp=min<1 ? min*p[i]:p[i];
}
else
{
maxTemp=min<1 ? min*p[i] : p[i];
minTemp=max>1 ? max*p[i] : p[i];
}
max=maxTemp;
min=minTemp;
mutil=mutil>max ? mutil:max;
}
return mutil;
}