/*此题求最大连续子序列,可以用动态规划的方法,用变量先记录遍历到数组的最大和及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-03-26 16:28:34 发布