hdu 1003(最大连续字串)

题意:很容易理解不用过多的解释。。。

分析:因为要求是连续的,所以只要它这左边的大于零就相加,然后以此类推,难点是记录序列的起点和终点,具体看我的代码吧!!

代码实现:

#include<stdio.h>
#include<string.h>
int a[100001];
int main()
{
   int T,n,i,j,sum,max,f,r,f1;
   scanf("%d",&T);
   for(j=1;j<=T;j++)
   {
       scanf("%d",&n);
       for(i=1;i<=n;i++)
           scanf("%d",&a[i]);
       f=f1=r=1;
       sum=a[1];max=a[1];
       for(i=2;i<=n;i++)
       {
          if(sum>=0)//a[i]左边的序列大于零就相加
          {
              sum=sum+a[i];
              if(sum>max)
              {
                  f=f1;
                  r=i;
                  max=sum;
              }
          }
          else//小于零就不相加
          {
              sum=a[i];
              if(a[i]>=0)
                  f1=i;
              if(max<sum)
              {
                  f=r=i;
                  f1=i;
                  max=sum;
              }
          }
       }
       printf("Case %d:\n",j);
       printf("%d %d %d\n",max,f,r);
       if(j!=T)
           printf("\n");
   }
   return 0;
}
原文地址:https://www.cnblogs.com/jiangjing/p/2986375.html