/*此题求最大连续子序列,可以用动态规划的方法,用变量先记录遍历到数组的最大和及i和j,一直遍历,
并与当前最大子序列和比较。如果大于当前最大子序列和,则置换之,否则,重新开始,直至遍历完数组。*/
#include <iostream>
using namespace std;
int main()
{
int K;
while(cin>>K)
{
int jilu=-1,sum=0,first=0,last=0,start=0,end=0,mark=0;
int n[10005];
for(int i=0;i<K;++i)
{
cin>>n[i];
if(n[i]>=0)
mark=1;
sum+=n[i];
if(sum>jilu) //如果sum大于当前子序列和,置换之
{
end=i;
jilu=sum;
first=start;
last=end;
}
if(sum<0) //如果sum小于0了,重现开始
{
start=i+1;
sum=0;
}
}
if(mark==0) //如果全小于0,按题意输出
cout<<0<<' '<<n[0]<<' '<<n[K-1]<<endl;
else //否则,输出最大子序列
cout<<jilu<<' '<<n[first]<<' '<<n[last]<<endl;
}
return 0;
}浙大PAT (Advanced Level) Practise 1007
最新推荐文章于 2016-05-13 18:16:26 发布
本文详细介绍了使用动态规划方法解决最大连续子序列问题的算法过程,包括初始化变量、遍历数组、更新最大子序列和等关键步骤,并通过实例展示了算法的应用。
1614

被折叠的 条评论
为什么被折叠?



