HDOJ1003 - Max Sum

题目大意:和1231一样,求最大连续子序列和,只是这个题目是要求求的是最大连续子序列和的首元素位置和尾元素位置。

题解:直接把1231的代码稍微修改一下就行了。。。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define MAXN 100005

typedef struct

{

    long x,y;

} NODE;

NODE path[MAXN];

long d[MAXN],a[MAXN];

int main(void)

{

    long i,n,maxs,l,r,T,p;

    scanf("%ld",&T);

    p=1;

    while(T--)

    {

        scanf("%ld",&n);

        for(i=0; i<n; i++)

            scanf("%ld",&a[i]);

        memset(d,0,sizeof(d));

        d[0]=a[0];

        maxs=d[0];

        l=0;

        r=0;

        for(i=1; i<n; i++)

        {

            if(d[i-1]<0)

            {

                d[i]=a[i];

                path[i].x=i;

                path[i].y=i;

                if(d[i]>maxs)

                {

                    maxs=d[i];

                    l=i;

                    r=i;

                }

            }

            else

            {

                d[i]=d[i-1]+a[i];

                path[i].x=path[i-1].x;

                path[i].y=i;

                if(d[i]>maxs)

                {

                    maxs=d[i];

                    l=path[i].x;

                    r=path[i].y;

                }

            }



        }

        printf("Case %ld:\n",p++);

        printf("%ld %ld %ld\n",maxs,l+1,r+1);

        if(T) printf("\n");

    }

    return 0;

}

 

你可能感兴趣的:(max)