首页 > 代码库 > hdu 1231(最大连续子序列和)

hdu 1231(最大连续子序列和)

这个还是比较简单的,没什么可说的,就是尾巴往下滑动,如果区间内的sum小于0,就重新取区间

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=10000+10;
int a[maxn];
int n;
int main()
{
   while(~scanf("%d",&n)&&n)
   {
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
      int s,d,sum,ans,st,ed;
       s=d=sum=ans=st=ed=a[1];
       for(int i=2;i<=n;i++)
       {
           if(sum>0)//只要能为后面值的增大添一份力,即为正数,就需要,否则就扔掉
           {
               sum+=a[i];
               d=a[i];
           }
           else
           {
               s=d=sum=a[i];
           }
           if(sum>ans)
           {
               ans=sum;
               st=s;
               ed=d;
           }
       }
       if(ans<0) printf("0 %d %d\n",a[1],a[n]);
       else printf("%d %d %d\n",ans,st,ed);
   }
    return 0;
}

 

hdu 1231(最大连续子序列和)