//dp[i] = max(dp[i-1]+a[i],dp[i]) = a[i]+dp[i-1]<0?0:dp[i-1];
//max=a[i]+max<0?0:max;
#include<iostream>
using namespace std;
int a[10010];
inline void read(int &d)
{
char ch;
int flag=1;
while(ch=getchar(),ch==' '||ch=='\n');
if(ch=='-'){flag=-1;d=0;}
else{d=ch-'0';}
while(ch=getchar(),ch>='0'&&ch<='9') d=d*10+ch-'0';
d*=flag;
}
int main()
{
int n;
while(cin>>n&&n)
{
int flag=1; //flag=1全为负
for(int i=0;i<n;i++)
{
read(a[i]);//cin>>a[i];
if(a[i]>=0) flag=0;
}
if(flag){
cout<<0<<' '<<a[0]<<' '<<a[n-1]<<endl;continue;
}
int sum=0,ans=-1,head,rear,tmp=0;//tmp:sum段的开头
for(int i=0;i<n;i++)
{
sum+=a[i];
if(sum>ans) head=tmp,rear=i,ans=sum;
if(sum<0) sum=0,tmp=i+1;
}
cout<<ans<<' '<<a[head]<<' '<<a[rear]<<endl;
}
return 0;
}
hdu 1231最大连续子序列 【DP】
最新推荐文章于 2021-05-25 01:49:32 发布