求最大子序列和

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

你可能感兴趣的:(职场,序列,休闲,最大子序列和)