dp-最大连续子序列的和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dp-最大连续子序列的和相关的知识,希望对你有一定的参考价值。

 

什么是最大连续子序列和呢 ?

  最大连续子序列和是所有子序列中元素和最大的一个 。

 

问题 :

  给定一个序列 { -2, 11, -4, 13, -5, -2 } , 则最大连续子序列和为 20 , 即 { 11 , -4 , 13 } 。

 

分析 :

  要怎样去解决这个问题呢 ? 设出 两个变量 , 一个 ans 用来存放最终的结果 , 一个用来现在对元素进行加和 , 每当有最大的和则更形下 ans 。

 

代码示例 :

  

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

#define Min(a,b) a>b?b:a
#define Max(a,b) a>b?a:b

int main ( ) {
    int a[6] = {-2, 11, -4, 13, -5, -2 } ;

    int ans = 0 , now = 0 ;

    for ( int i = 0 ; i < 6 ; i++ ) {
        now += a[i] ;
        if ( now < 0 ) now = 0 ;
        if ( ans < now ) ans = now ;  // 每次更新 ans 的值 , 那么 ans 中存的一定是最大的元素和  
    }

    cout << ans << endl ;

    return 0 ;
}

 

题目 : HDU 1003   http://acm.hdu.edu.cn/showproblem.php?pid=1003

以上是关于dp-最大连续子序列的和的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1231 最大连续子序列:水dp

暴力+分治+贪心+DP:最大子序列和

B. Just Eat It! CodeForces1285B

hdu 1231 最大连续子序列(dp)

DP专题训练之HDU 1231 最大连续子序列

动态规划:最大连续子序列乘积