/*
HDOJ 1231
最大连续子序列
dp[i]=max{num[i],dp[i-1]+num[i]}
*/
#include <iostream>
using namespace std;
struct Temp
{
int v;
int id;
};
int main()
{
int n,num[10001],i,v,flag;
Temp dp[10001],maxn;
while(cin>>n)
{
if(n == 0)
break;
flag=0;
for(i=0;i<n;i++)
{
cin>>num[i];
if(num[i] >= 0)
flag=1;
}
if(flag == 0)
{
cout<<"0 "<<num[0]<<" "<<num[n-1]<<endl;
continue;
}
memset(dp,0,sizeof(dp));
dp[0].v=num[0];
dp[0].id=0;
for(i=1;i<n;i++)
{
if(dp[i-1].v + num[i] >num[i])
{
dp[i].v=dp[i-1].v+num[i];
dp[i].id=dp[i-1].id;
}
else
{
dp[i].v=num[i];
dp[i].id=i;
}
}
maxn.v=-9999999;
maxn.id=-111;
for(i=0;i<n;i++)
{
if(dp[i].v > maxn.v)
{
maxn.v=dp[i].v;
maxn.id=dp[i].id;
v=i;
}
}
cout<<maxn.v<<" "<<num[maxn.id]<<" "<<num[v]<<endl;
}
return 0;
}
动态规划——HDOJ 1231
最新推荐文章于 2020-07-04 14:29:05 发布