题目1011:最大连续子序列

问题来源

  http://ac.jobdu.com/problem.php?pid=1011

问题描述

  给定一个数组,让我们求它的最大连续子序列。需要注意的是需要记录最大子序列和的起始和末尾,用两个变量实时跟踪就可以了。

问题分析

  求最大连续子序列和有很多种方法,这里采用的是动态规划思想,既快捷有好理解。为了求最大子序列和方法我特意写了一篇总结,请参考:http://www.cnblogs.com/AlvinZH/p/6795647.html

参考代码

//
// Created by AlvinZH on 2017/5/2.
// Copyright (c) AlvinZH. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;

int a[10005];
int s,e;

int MaxSum(int n)
{
    int sum=0,b=0,tempS=0;
    for(int i=0;i<n;i++)
    {
        if(b>0)
        {
            b+=a[i];
        }
        else
        {
            b=a[i];
            tempS=i;
        }
        if(b>sum)
        {
            sum=b;
            s=tempS;
            e=i;
        }
    }
    return sum;
}

int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        s=e=0;
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);

        int ans=MaxSum(n);
        printf("%d %d %d\n",ans,a[s],a[e]);
    }
}

 

作者: AlvinZH

出处: http://www.cnblogs.com/AlvinZH/

本人Github:https://github.com/Pacsiy/JobDu

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

posted @ 2017-05-02 09:42  AlvinZH  阅读(257)  评论(0编辑  收藏  举报