DP最大字段和算法

/********************************************************************

*最大字段和算法 O(n)

*功能: 求解给定数组的最大字段和,并求出最大子段的起始位置和结束位置。

*函数: maxsum(int *num, int len, int *s,int *t)

*参数: num[]     //原始数据

*          len         //数据长度

*          s                    //最大子段的起始位置

*            t                    //最大子段的结束位置

*返回值:

*            sum               //数组的最大字段和

*********************************************************************/

#define MIN -1000000;

int maxsum(int *num, int len, int *s, int *e)

{

    inti, b = 0;

    intstart = 1, end = 0;  

    intsum = MIN;

 

    for( i = 1; i <= len; i++) {

       if (b >= 0) {

           b += num[i];

           end++;

       } else {

           b = num[i];

           start = i;

           end = i;

       }

 

       if (b > sum) {

           sum = b;

           *s = start;

           *e = end;

       }

    }

   return sum;

}

你可能感兴趣的:(DP最大字段和算法)