题目:http://acm.hdu.edu.cn/showproblem.php?pid=1231
思路:
一个点就是,sum一旦小于0,就重新塑造子序列。
#include<bits/stdc++.h>
#define ll long long int
using namespace std;
const int inf=0x7fffffff;
int a[10005];
int main(){
int n;
while(scanf("%d",&n)&&n){
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int maxn=-inf,f,l,st=a[1],sum=0;
for(int i=1;i<=n;i++){
sum+=a[i];
if(sum>maxn){
l=a[i];
f=st;
maxn=sum;
}
if(sum<0){
sum=0;
st=a[i+1];
}
}
if(maxn<0)
printf("0 %d %d\n",a[1],a[n]);
else
printf("%d %d %d\n",maxn,f,l);
}
return 0;
}