HDU 1003 Max sum

这是一道典型 的动态规划的题目,意思是让求一段序列中连续子序列的最大和,并输出起始位置和终止位置

//============================================================================
// Name        : HDU.cpp
// Author      : sunyanfei
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <cstdio>
using namespace std;
int sequence[100010];
int N;
int main()
{
    int T,i,j;
    scanf("%d",&T);
    int cases=0;
    while(T--)
    {
        cases++;
        scanf("%d",&N);
        for(i=1;i<=N;i++)
        {
            scanf("%d",&sequence[i]);
        }
        int start;
        int end;
        long long maxsum=-9999999;
        for(j=1;j<=N;j++)
        {
            long long sum=0;
            int st=j;
            int endll;
            while(sum>=0)
            {
                sum+=sequence[j];
                endll=j;
                if(sum>maxsum)
                {
                    maxsum=sum;
                    start=st;
                    end=endll;
                }
                j++;
                if(j>N)break;
            }
            j--;
        }
        printf("Case %d:\n",cases);
        cout<<maxsum<<" "<<start<<" "<<end<<endl;
        if(T!=0){printf("\n");}
    }
    return 0;
}

posted on 2011-07-16 08:43  lonelycatcher  阅读(196)  评论(0编辑  收藏  举报

导航