码迷,mamicode.com
首页 > 其他好文 > 详细

第28章:最大连续乘积子串

时间:2015-09-26 23:54:15      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

-2.5 4 0 3 0.5 8 -1Ans:(3,0.5,8)

template<typenameComparable>

Comparable maxprod(constvector<Comparable>& v)

{

 int i;

 Comparable maxProduct =1;

 Comparable minProduct =1;

 Comparable maxCurrent = 1;

 Comparable minCurrent =1;

 

 for(inti=0;i<v.size();i++)

 {

  maxCurrent *= v[i];

  minCurrent *= v[i];

  if(maxCurrent >maxProduct)

   maxProduct =maxCurrent;

  if(minCurrent >maxProduct)

   maxProduct =minCurrent;

  if(maxCurrent <minProduct)

   minProduct =maxCurrent;

  if(minCurrent <minProduct)

   minProduce =minCurrent;

  if(minCurrent >maxCurrent)

  Swap(maxCurrent,minCurrent);

  if(maxCurrent < 1)

   maxCurrent = 1;

  return maxProduct;

 }

}

 

 

*直接用动态规划求解

状态转移方程:max表示以a结尾的最大连续子串

Max = max{a,Max[i-1]*a,Min[i-1]*a};

Min =min{a,Max[i-1]*a,Min[i-1]*a};

 

C++代码:

double func(double* a ,constint n)

{

 double* maxA = newdouble[n];

 double* minA = newdouble[n];

 msxA[0] = min[A] = a[0];

 double value = maxA[0];

 for(int i=1;i<n;i++)

 {

  maxA[i] =max(max(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);

  minA[i] =min(,min(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);

  vlaue =max(value,maxA[i]);

 }

 delete [] maxA;

 delete [] minA;

 return value;

}

第28章:最大连续乘积子串

标签:

原文地址:http://www.cnblogs.com/lsx1993/p/4841552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!