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 對角線垂直方...