1.实验要求:
采用动态规划策略设计并实现算法,求解最大子段和问题。要求算法的复杂度不超过O(n)。
2.算法基本思想
首先分析问题最优解的结构,建立递归方程,并计算最优值
3.主要数据结构及其作用
一维数组,纪录保存数据
4.测试用例
5.实验结果截图
6.代码实现
#include<iostream>
using namespace std;
int besti=0,bestj=0;
int MaxSum(int n,int *a)
{
int sum = 0,b = 0;
for(int j=1; j<=n; j++)
{
int i=0;
if(b > 0)
b+=a[j];
else
{
b = a[j];
i=j;
}
if(b>sum)
{
sum = b;
besti=i;
bestj=j;
}
}
return sum;
}
int main()
{
int n;
cout<<"请输入需要输入的元素的个数:"<<endl;
cin>>n;
int a[n];
cout<<"请输入"<<n<<"个元素:"<<endl;
for(int i=0; i<n; i++)
cin>>a[i];
cout<<"最大子段和为:"<<MaxSum(n,a)<<" ";
cout<<"起始下标为:"<<besti<<" 终止下标为:"<<bestj;
}