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