1007 Maximum Subsequence Sum (25 point(s))
阿新 • • 發佈:2018-11-25
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; }