欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

最大连续子段和/区间最大和

时间:2023-04-21

题目描述:给出一个长为n的数列,a1,a2,……,an,求和最大的连续子序列,即找到一对(i,j),i<=j,使ai+ai+1+……+aj的和最大,输出这个和

思路:先求出前n项的前缀和,再用a[j] - a[i] ,求出从 i 到 j 的子段和,动态更新,求出最大子段和

#includeusing namespace std;const int N = 1e5 + 10;int n;int a[N];int main(){scanf("%d", &n);for(int i = 1; i <=n; i++ ) scanf("%d", &a[i]);int ans = 0;int minn = -N;for(int i = 1; i <= n; i++){a[i] += a[i - 1];}for ( int i = 1 ; i <= n ; i++ ){ ans = max(ans,a[i]-minn); minn = min(minn,a[i]);}printf("%d", ans);return 0;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。