小黑演算法成長日記6 最大連續m子段和求解

2021-10-23 08:14:31 字數 1385 閱讀 6912

arr =[-

2,11,

-4,13

,-5,

6,-2

]def

maxsum

(arr,m)

: n =

len(arr)

if m > n:

print

('輸入引數不合法'

)return

b =[(n+1)

*[0]

for i in

range

(m+1)]

max =

0for i in

range(1

,m+1):

#對角線長度方向遍歷

for j in

range

(i,n-m+i+1)

:#對角線的寬度方向遍歷

if j != i:

# 不是對角線寬度方向第乙個元素的情況:arr第j個元素單獨成一子段,故依次遍歷i-1子段與arr[j]組成i子段的情況

b[i]

[j]= b[i]

[j-1

]+ arr[j-1]

for k in

range

(i-1

,j):

# temp = b[i-1]

[k]+ arr[j-1]

if temp > b[i]

[j]:

b[i]

[j]= temp

else

:#是對角線寬度方向第乙個元素,只有一種情況:i個元素作為i個分段

b[i]

[j]= b[i-1]

[j-1

]+ arr[j-1]

print

('動態規劃矩陣:'

)for i in

range(1

,m+1):

for j in

range(1

,n+1):

print

(b[i]

[j],end =

' ')

print()

for j in

range

(m,n+1)

:if b[m]

[j]> max:

max = b[m]

[j]return max

print

(maxsum(arr,5)

)#5子段最優解

輸出:

動態規劃矩陣:

-2 11 7 0 0 0 0

0 9 7 24 0 0 0

0 0 5 22 19 0 0

0 0 0 18 17 28 0

0 0 0 0 13 24 26

26

小黑演算法成長日記23 堆排序

arr 2,5,4,2,1,22,4,5,3,87,3,22 def adjustheap arr,length,i 調整新新增arr i 元素後,繼續調整為大根堆 temp arr i 將arr i 存入temp k 2 i 1 從孩子中進行搜尋 while k length if k 1 len...

小黑演算法成長日記5 最大段和問題及其推廣

1.簡單暴力窮舉法 窮舉法 defmaxsum arr n len arr max 0 besti 1 bestj 1 for i in range n 遍歷序列開頭指標 sum 0for j in range i,n 遍歷序列結尾指標 sum arr j ifsum max max sum bes...

小黑演算法成長日記3 矩陣最優乘法順序

p 30 35,15 5,10 20,25 def function p n len p 1 m 0 n 1 for i in range n 1 動態規劃最優乘法次數記錄表 s 0 n 1 for i in range n 1 矩陣劃分位置記錄表 for r in range 1 n 對角線垂直方...