zoukankan      html  css  js  c++  java
  • 第28章:最大连续乘积子串

    -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;

    }

  • 相关阅读:
    C语言I博客作业02
    C语言II—博客作业01
    学期总结
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I 博客作业04
    C语言II博客作业04
    C语言II博客作业03
  • 原文地址:https://www.cnblogs.com/lsx1993/p/4841552.html
Copyright © 2011-2022 走看看