1007 Maximum Subsequence Sum (25 point(s))

 1007 Maximum Subsequence Sum (25 point(s))

部分未通过 22分

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
    long long start;
    long long end;
    long long sum;
};

bool camp(const node &one,const node &two){
    if(one.sum>two.sum){
        return 1;
    }else if(one.sum == two.sum){
        if(one.start<two.start){
            return 1;
        }else if(one.start == two.start){
            return one.end<two.end;
        }
    }
    return false;
}


int main(){
    long long M=0;
    cin>>M;

    vector<long long> nums;
    vector<node>outs;
    long long neg_count=0;

    for(long long i=0;i<M;i++){
        long long temp;
        cin>>temp;
        nums.push_back(temp);
        if(temp<0){
            neg_count++;
        }
    }
    if(neg_count==M){
        cout<<0<<" "<<nums[0]<<" "<<nums[nums.size()-1];
        return 0;
    }


    vector<long long> dp(nums.size()+1,0);

    long long start=0;
//    long long end=0;
    long long max=-1;
    long long length = dp.size()-1;

    for(long long i=0;i<length;i++){
        if(nums[i]>0){
            dp[i+1]=dp[i]+nums[i];
        }else{
            if(dp[i]+nums[i]>=0){
                dp[i+1]=dp[i]+nums[i];
            }else {
                dp[i+1]=0;
                start =i+1;
            }
        }
        if(max<dp[i+1]){
            node temp;
            temp.start = start;
            temp.end = i;
            temp.sum = dp[i+1];
            max = dp[i+1];
            outs.push_back(temp);
        }
    }



    sort(outs.begin(),outs.end(),camp);
    cout<<outs[0].sum<<" "<<nums[outs[0].start]<<" "<<nums[outs[0].end];
    return 0;

}

猜你喜欢

转载自blog.csdn.net/Willen_/article/details/84073014