#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
#define maxn 100100
int a[maxn],dp[maxn];
int max(int a,int b)
{
return a>b ? a:b;
}
int main()
{
int n,k;
while(scanf("%d",&n)!=EOF)
{
memset(dp,0,sizeof(dp));
if(n==0)
{
continue;
}
int flag=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]<0)
flag++;
}
if(flag==n)
{
printf("%d %d %d\n",0,a[0],a[n-1]);
continue;
}
dp[0]=a[0];
for(int i=1;i<n;i++)
{
dp[i]=max(a[i],dp[i-1]+a[i]);
}
k=dp[0];
int t;
for(int i=1;i<n;i++)
{
if(dp[i]>k)
{
t=i;
k=dp[i];
}
}
int num[100000];
int SUM=k;
int p=0;
for(int i=t;i>=0;i--)
{
SUM=SUM-a[i];
if(SUM!=0)
{
num[p]=a[i];
p++;
}
else
{
num[p]=a[i];p++;
break;
}
}
printf("%d %d %d\n",k,num[p-1],num[0]);
}
return 0;
}
第一道DP AC,纪念一下。
最大连续子序列。。。。写的好凌乱。。风吹啊吹,吹乱我代码花园。。但吹不走我的骄傲放纵,