HDOJ1003

MAX —sum  好久前做过 但是再看到的时候觉得的有点陌生

设Si是一定以i结尾的最大连续子序列

S1=a[1];

Sn=Sn-1>=0?Sn-1+a[n]:a[n];//状态转移大致是这样 则S1 —Sn中必有所求子序列 边存边比较 答案就出来了

#include<stdio.h>
int main()
{
    int a,P,n,start,temp,max,end,sum,mark=0;
    scanf("%d",&P);
        while(P--)
        {
            max=-1000,temp=1,sum =0;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a);    
                sum+=a;
                if(sum>max)
                {
                    max=sum;
                    start=temp;
                    end=i;
                }
                if(sum<0)
                {
                    sum=0;
                    temp=i+1;
                }
            }
            printf("Case %d:\n%d %d %d\n",++mark,max,start,end);
            if(P!=0){
                printf("\n");
            }
        }
    return 0;
} 

 

posted @ 2016-01-25 11:53  zxMrlc  阅读(225)  评论(0编辑  收藏  举报