最大子段和

    技术2022-07-11  65

    题目描述:

    N个整数组成的序列a11,a22,a33,…,ann, 求该序列如aii+ai+1i+1+…+ajj的连续子段和的最大值。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。 Input 第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N + 1行:N个整数(-10^9 <= Aii <= 10^9) Output 输出最大子段和。 Sample Input 6 -2 11 -4 13 -5 -2 Sample Output 20

    AC代码:

    #include <stdlib.h> #include <stdio.h> #include <algorithm> #include <iostream> #include <string.h> #include <math.h> #define min(a,b) a<b?a:b; using namespace std; long long a[50000+5]; long long ans; int main() { int n,i; cin>>n; for(i=0;i<n;i++) { cin>>a[i]; ans=max(ans,a[i]); } if(ans>=0) { long long sum=0; for(i=0;i<n;i++) { if(sum+a[i]<0) sum=0; else sum+=a[i]; ans=max(ans,sum); } } cout<<ans<<endl; return 0; }
    Processed: 0.013, SQL: 9