题目:
题目大意:
在数组中寻找和最大的一段连续的序列
思路:
用贪心的做法,从第一个开始,累加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; }