4 solutions
-
4
题解
子序列最大和倒是挺好做的,关键就在那两个起始位置不容易找到,然后直接代码
代码
#include<bits/stdc++.h> #include<algorithm> using namespace std; int main(){ std::ios::sync_with_stdio(false); int n,sum=0,ma=INT_MIN; cin>>n; int a[n+5],b=1,e=1,m=1;//m很关键哈 for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; if(ma<sum){//先进行这项,以免全部元素都是负数的时候能存进ma, ma=sum; b=m;//最大值改变,下标记得调整 e=i; } if(sum<0){ sum=0; m=i+1;//记录起始位置下标,根据第一个if来调整 if(m==n+1) m=n; } } cout<<b<<endl; cout<<e<<endl; cout<<ma<<endl; return 0; }
Information
- ID
- 77
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 326
- Accepted
- 47
- Uploaded By