計蒜客 最大連續子列和

2021-08-08 21:00:16 字數 1064 閱讀 1839

給定乙個序列,求和最大的子列,子列中元素一定是連續的

我們用dp[

i]來記錄以第

i 個位置元素作為末尾的和最大的子列和的值,當我們考慮第i+

1 個位置的時候,我們只需要考慮這個元素是否加入到以

i 為結尾的最大子列中,根據dp

的定義我們可以知道dp

[i+1

]=ma

x(dp

[i]+

a[i+

1],a

[i+1

])我的思考:

一開始我採用的是正向思考,即每次對於第i個元素考慮是否加入我們的最大連續子列中來,但是很明顯如果單純的考慮這個元素是沒辦法決定是否加入的,因為如果當前元素是乙個負數,但是這個數字是之後卻是乙個很大的正數,如果不加入這個負數就沒辦法加入後邊的數字,思路終結於此。

繼續思考:

其實上面的思路沒有問題,但是當我說到「加入最長子列和」中的是時候其實我沒有明確加入到哪個最長子列當中。首先為了確定子列,我們給定子列起點i,之後對於i之後到每個元素進行判定是否加入到i為首的子列當中,為了避免短視,我們需要在判定i的時候能夠知道i之後的一些資訊,經過思考我們想到如果能夠確定以i為起點的最大子列和就可以判定是否加入我們的最大的最大子列當中來了,所以我們定義「以i為起點的最大子列和」為dp[i],這樣我們的原問題可以變成dp[i] = max(a[i], dp[i + 1] + a[i])了,為了能夠計算,我們需要先計算出來dp[i + 1],這就需要我們從尾到頭進行計算了。

#include 

#include

#include

#include

using

namespace

std;

const

int maxn = 1000;

const

int inf = 1

<< 30;

int n, dp[maxn], a[maxn];

int main()

printf("%d\n", maximum);

}return

0;}

最大連續子列和

最大連續子列和 已知有乙個連續的數列,其值可正可負求其連續的最大子列之和。即數列為 1,0,2,3,3,4其最大子列和為2 3為5 一 暴力法 o 每一次都計算從這個位置開始的所有的連續子列和中的最大值,最終求出其最大值。int maxsequence int ptr,int n return ma...

最大連續子列和

給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。子列是給定序列中隨機抽取某些數組成的新序列,如就是給定序列的子串行,而連續子串行即 中間不斷開,是連續的。ps 子串行必須按照給定序列的順序進行排列,不能亂放 由此,我們就可以知道什麼是最大的連續子串行的和,即最大連...

最大連續子串行和

最大連續子串行和問題是個很老的面試題了,最佳的解法是o n 複雜度,當然其中的一些小的地方還是有些值得注意的地方的。這裡還是總結三種常見的解法,重點關注最後一種o n 的解法即可。需要注意的是有些題目中的最大連續子串行和如果為負,則返回0 而本題目中的最大連續子串行和並不返回0,如果是全為負數,則返...