hdu1231 最大连续子序列

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int a[10010];
struct T
{
    int sum;
    int head;
}d[10010];
int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        int head=-1;
        int i;
        bool flag=false;
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]>=0)
            {
                flag=true;
                if(head==-1)
                {
                    head=i;
                }
            }
        }
        if(!flag)
        {
            printf("0 %d %d\n",a[0],a[n-1]);
            continue;
        }
        //d[head],,,d[n-1]
        d[head].head=head;
        d[head].sum=a[head];
        int Max=a[head],maxi=head,maxj=head;
        for(i=head+1;i<n;i++)
        {
            d[i].head=i;
            d[i].sum=a[i];
            if(d[i-1].sum>=0)
            {
                d[i].sum=d[i-1].sum+a[i];
                d[i].head=d[i-1].head;
            }
            if(Max<d[i].sum)
            {
                Max=d[i].sum;
                maxi=d[i].head;
                maxj=i;
            }
        }
        printf("%d %d %d\n",Max,a[maxi],a[maxj]);
    }
    return 0;
}
posted @ 2012-08-09 22:10  willzhang  阅读(174)  评论(0编辑  收藏  举报