算法第三章上机实践报告
Posted -kdj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第三章上机实践报告相关的知识,希望对你有一定的参考价值。
1、实践题目:
最大子段和
2,问题描述:
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
3、算法描述:
定义两个数组a,b,a表示要输入的序列,b表示序列的子段和(比如b[3]表示a[1],a[2],a[3]的最大子段和),然后进行判断,如果前面的最大子段和大于0,则加上改最大子段和,若前面的最大子段和小于0,则不加,最后在判断该序列是否全部为负数,若是则输出0,若不是,则输出b[i]。
4、空间复杂度分析:
空间复杂度为O(n)。
5、代码描述:
#include <iostream>;
using namespace std;
int a[10000],b[10000];
int num=0;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
b[i]=max(a[i],b[i-1]+a[i]);
num=max(num,b[i]);
}
cout<<num;
return 0;
}
6、心得体会:
该题运用动态规划的思想解题,而且不会太难理解,与队友做完这道题后,感觉对自己理解动态规划的思想有所帮助。
以上是关于算法第三章上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章