码迷,mamicode.com
首页 > 编程语言 > 详细

算法第三章上机实践报告

时间:2018-11-04 21:17:37      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:实践   for   问题   描述   动态   理解   序列   报告   pac   

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、心得体会:

该题运用动态规划的思想解题,而且不会太难理解,与队友做完这道题后,感觉对自己理解动态规划的思想有所帮助。

算法第三章上机实践报告

标签:实践   for   问题   描述   动态   理解   序列   报告   pac   

原文地址:https://www.cnblogs.com/-Kdj/p/9905388.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!