求最大子序列和

我还没看到动态规划,但是今天看到了这个求最大子序列和的问题,网上一查,才发现这个思路是动态规划的思想。当然现在还不太明白动态规划到底怎么用,不过求最大子序列和的思路还是不难的。本人菜鸟,还请大家多多指教^^

#include<iostream>

using namespace std;

int* MaxSum(int arr[],int count)

{

    //start_tmp和max_tmp是临时存储开始位置和

    //最大和的变量

    int Start,End,Max,result[3],start_tmp,max_tmp;

    int i;

    Start=End=start_tmp=0;

    Max=max_tmp=arr[0];

    for(i=1;i<count;i++)

    {

        if(max_tmp>=0)

            max_tmp+=arr[i];

        else

        {

            max_tmp=arr[i];

            start_tmp=i;

        }

        if(Max<max_tmp)

        {

            Max=max_tmp;

            Start=start_tmp;

            End=i;

        }

    }

    result[0]=Max;

    //“+1”是把数组的0号元素当成第一个来数

    //这样比较直观

    result[1]=Start+1;

    result[2]=End+1;

    return result;

}

//测试

void main()

{

    int arr[7]={0,6,-1,1,-6,7,-5};

    int *result=MaxSum(arr,7);

    cout<<result[0]<<‘ ‘<<result[1]<<‘ ‘<<result[2]<<endl;

}

点赞