hdu 1003 max sum

#include<stdio.h>
#define min -99999999
int sta,end;
int main()
{
    int n,i,j,t,sum,maxsum,in,b;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        sum=0;maxsum=min;sta=0;
        scanf("%d",&t);
        for(b=j=0;j<t;j++) 
        {    
            scanf("%d",&in);
            sum+=in;
            if(sum>maxsum)
            {
                maxsum=sum;
                end=j;
                sta=b;
            }
            if(sum<0)
            {
                sum=0;
                b=j+1;            
            } 
        }
        printf("Case %d:\n%d %d %d\n",i+1,maxsum,sta+1,end+1);
        if(i!=n-1) printf("\n");
    }
    return 0;
}

上面用的是冬天用规划思想,下面的代码跟上面一样:

/*
 * 动态规划实现,算法复杂度O(n)
 */
int maxSubSequenceSum3(int a[], int len)
{
    int i;
    int curSum; /* 当前序列和 */
    int maxSum; /* 最大序列和 */

    /* 初始化当前序列和为0 */
    curSum = 0;

    /* 初始化最大子序列和为序列第一个元素 */
    maxSum = a[0];

    /* 开始循环求子序列和 */
    for (i = 0; i < len; i++)
    {
        curSum = curSum + a[i];

        /* 与最大子序列和比较,更新最大子序列和 */
        if (curSum > maxSum)
        {
            maxSum = curSum;
        }

        /* 动态规划部分,舍弃当前和为负的子序列 */
        if (curSum < 0)
        {
            curSum = 0;
        }
    }
    return maxSum;
}

http://blog.csdn.net/amossavez/article/details/4533325

http://blog.csdn.net/volant_hoo/article/details/2252490

原文地址:https://www.cnblogs.com/youxin/p/2644152.html