码迷,mamicode.com
首页 > 其他好文 > 详细

HDOJ1003

时间:2016-01-25 12:57:23      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

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;
} 

 

HDOJ1003

标签:

原文地址:http://www.cnblogs.com/Geek-xiyang/p/5157056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!