HDU 1231 最大连续子序列
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
int a[10010];
int maxsum,maxhere;
int left,right;
while(cin>>n)
{
if(n==0)
break;
for(int i=0;i<n;i++)
cin>>a[i];
maxsum=a[0];
maxhere=a[0];
left=right=a[0];
int flag;
for(int i=1;i<n;i++)
{
if(maxhere<=0)
{
maxhere=a[i];
flag=a[i];
}
else
maxhere+=a[i];
if(maxhere>maxsum)
{
maxsum=maxhere;
left=flag;
right=a[i];
}
}
if(maxsum<0)
cout<<"0"<<" "<<a[0]<<" "<<a[n-1]<<endl;
else
cout<<maxsum<<" "<<left<<" "<<right<<endl;
}
return 0;
}

浙公网安备 33010602011771号