和max sum那道题有点类似
代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stack>
#include <iostream>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
int f[10005];
int sum[10005];
int main()
{
int n;
while(scanf("%d",&n),n)
{
for(int i=1;i<=n;i++)
scanf("%d",&f[i]);
sum[1]=f[1];
for(int i=2;i<=n;i++)
sum[i]=max(sum[i-1]+f[i],f[i]);
int maxn=-0x7fffffff;
int sign;
for(int i=1;i<=n;i++)
{
if(sum[i]>maxn)
{
maxn=sum[i];
sign=i;
}
}
int ksign=f[sign];
for(int i=sign;i>1;i--)
if(sum[i-1]+f[i]==sum[i])
{
ksign=sum[i-1];
}
else
break;
if(maxn<0)
{
maxn=0;
ksign=f[1];
sign=n;
}
printf("%d %d %d\n",maxn,ksign,f[sign]);
}
}