文章
52
粉丝
68
获赞
22
访问
11.5k
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n==0){break;}
int a[n],b[n];
for(int i=0;i<n;i++){
cin>>a[i];
b[i]=a[i];
}
for(int i=1;i<n;i++){
if(a[i-1]>0)a[i]+=a[i-1];
}
int max=a[0],pos=0;
for(int i=0;i<n;i++){
if(a[i]>max){
max=a[i];
pos=i;
}
}
int pos2=pos;
for(;pos2>=0;pos2--){
if(a[pos2]<0)break;
}
if(max<0)cout<<0<<' '<<b[0]<<' '<<b[n-1]<<endl;
else cout<<max<<' '<<b[pos2+1]<<' '<<b[pos]<<endl;
}
}
首先要解决最大值问题,最长连续子序列的结论是基于前面的结论增长出来的,因为要连续,所以只要不是负的,为了更有可能的最大值,对于当前的结论来说,都会接受该次增长,最后我们得到了到每个元素的最大位置的全部的最长连续子序列,然后,我们根据前面的分析,既然大于0的都会计入到连续的增长中,那么小于...
登录后发布评论
暂无评论,来抢沙发