PAT-1007 Maximum Subsequence Sum

题目:

 

题目大意:

在数组中寻找和最大的一段连续的序列

思路:

用贪心的做法,从第一个开始,累加a[i],如果sum<0就把这一段给舍去掉,从新的起点开始,如果sum>max,则进行信息的更新

#include <iostream>

using namespace std;
const int MAXN = 2e5+5;
const int INF = 0x7fffffff;
int a[MAXN];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    int sum=0,l=0,r=0,max_=-INF,l_=0;
    for(int i=0;i<n;i++){
        sum+=a[i];
        if(sum>max_){
            max_=sum;r=i;l_=l;
        }
        if(sum<0){
            sum=0,l=i+1;
        }
    }
    if(max_<0){
        cout<<"0"<<" "<<a[0]<<" "<<a[n-1]<<endl;
    } else {
        cout<<max_<<" "<<a[l_]<<" "<<a[r]<<endl;
    }

    return 0;
}

 

posted @ 2020-12-13 13:33  grass_lin  阅读(77)  评论(0编辑  收藏  举报