160326 18 00 最大子串行之和 1

2022-02-16 01:28:39 字數 3516 閱讀 2152

此篇講的是截止時間至 3 月 26 日 18:00 的最大子串行之和 1 之小結。相應的題目,可以見王建民老師的部落格中第一題:

這是乙個最優化問題,並且要求時間複雜度為 \(o(n)\)。這樣一來,首先想到的應該是動態規劃思想。

動態規劃是求解最優化問題的一種思想。

動態規劃的核心,是要尋找一種看待問題的方式:這種角度以某種方式將原問題劃分為有限的若干階段;每個階段可以有若干狀態,但只有乙個最優狀態;當前階段的最優狀態,可以用某種確定的方式,從過去某些階段的某些狀態直接得到;這種方式,只與這些階段的狀態有關,而與這些狀態是如何得到的無關。這樣一來,如果我們能夠在某個階段找到確定的最優狀態,就能夠逐層遞推,找到原問題的最優解。

在這裡:

也就是說,動態規劃的核心,是要尋找一種具有最優子結構的無後效的問題拆解方式。

以下是用 python 簡寫的本題參考:

def maxsubarraysum (nums):

if not nums:

return none

elif 1 == len (nums):

return nums[0]

local_max, global_max = nums[0], nums[0]

for i in xrange (1, len (nums)):

local_max = max (local_max + nums[i], nums[i])

global_max = max (local_max, global_max)

return global_max

if __name__ == '__main__':

test_cases = [, [0], [1], [1, 2, 3], [-3, -1, -2],

[9, 8, 5, 2, -5, 6, 2, -2]]

for nums in test_cases:

print "the maxsubarraysum of", nums, "is", maxsubarraysum (nums)

這次作業滿分 10 分,採取扣分制與體驗分相結合的方式。具體來說:

學號截至上次作業得分小計

160326 18:00

小計20122951237

3020132897249

3320132900

116.5

17.5

20132902

266.5

32.5

20132907308

3820132917

327.5

39.5

20132922

287.5

35.5

20132927

20.5

626.5

20132935

24.5

933.5

20132967208

2820132970

22.5

022.5

20132984297

3620132985

27.5

5.533

20133005

24.5

529.5

20133009

255.5

30.5

20133012

27.5

532.5

20133014145

1920133018193

2220133039

29.5

2.532

20133040

26.5

1.528

20133045218

2920133048

281.5

29.5

20133051

24.5

832.5

20133054

312.5

33.5

20133057

17.5

623.5

20133059

19.5

7.527

20133062

124.5

16.5

20133064

24.5

630.5

20133070256

3120133075266

3220133078297

3620133081

24.5

6.531

20133087

24.5

5.530

20133100288

3620132899

6.53.5

1020132901

95.5

14.5

20132903

22.5

931.5

20132910

28.5

937.5

20132912

327.5

39.5

20132919319

4020132924329

4120132958308

3820132959

307.5

37.5

20132965

286.5

34.5

20132971

266.5

32.5

20132980287

3520133004

28.5

5.534

20133008

22.5

527.5

20133010

8.52.5

1120133013198

2720133017

216.5

27.5

20133019296

3520133024

249.5

33.5

20133027

249.5

33.5

20133031

185.5

23.5

20133042

17.5

522.5

2013304350

520133044

4.50

4.520133047151

1620133056

243.5

27.5

20133058

25.5

833.5

20133063

215.5

26.5

20133066

21.5

021.5

20133073

14.5

8.523

20133077

245.5

29.5

20133079

245.5

29.5

20133088

10.5

010.5

20133093

21.5

425.5

20133099174

2120133101258

33歡迎參看下面的文章:

最大子串行

模板 int maxsubsequence const int a,int n return maxsum 複雜度on 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。在今年的資料...

最大子串行

最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。你已經看出來了,找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最...

最大子串行

maxsum最大子串行問題。其實是動態規劃問題,遞推式如下 s 1 a 1 s n s n 1 0?s n 1 a n a n 注意點 暴力是可以解決問題,但是時間肯定會超時。暴力就是把所有子串行都查一遍然後找乙個最大的。如序列為123456,它的所有子串行為 1 2 3 4 5 6 12 123 ...