如題
因為要求的是連續子串行和的最大值,所以分類應為c[i]要不要i之前的序列
對於第i個元素,
1)要i之前的序列,則table[i1]+c[i]
2)不要i之前的序列,則c[i]
取兩者裡邊的最大值給了table[i]
numpy.argmax(list) :返回列表中最大元素的索引
詳解argmax
def bottom_up_seque(c):
lent=len(c)
table=[none]*(lent+1)
table[0]=0
table[1]=c[0]
for i in range(2,lent+1):
table[i]=max(table[i-1]+c[i-1],c[i-1])
return table
def back_seque(table,c):
select=
import numpy
lent=len(table)
max_sum=max(table) #max_sum為table中的最大值
max_i=numpy.argmax(table) #max_i為table中最大元素的索引
i=max_i
while max_sum>0:
max_sum-=c[i-1]
i-=1
return select
if __name__=="__main__":
c=[-2,11,-4,13,-5,2]
temp=bottom_up_seque(c)
select=back_seque(temp,c)
print("動態規劃表:")
print(temp)
print(select[::-1])
求連續子串行的最大值
問題描述 有一串數字 可正可負的int,放在陣列num裡 要求找到起始位置start和終止位置end,使得從start位置到end位置的所有數字之和最大,返回這個最大值max。演算法思想 使用動態規劃。設 f x 為以 a x 終止且包含 a x 的最大序列的和,有 f 1 a 1 f x 1 f ...
動態規劃 最大連續子串行和
題目大意就是讓你選出一段和最大的連續序列,當有幾個序列和並列時,選出下標最小的的連續序列。可以採用動態規劃的思想解決,設一連續序列為a 0 a 1 a n 分別以a 0 a 1 a n 結尾的最大序列和為d 0 d 1 d n 若d i 1 0,則d i d i 1 a i 若d i 1 0,則d ...
動態規劃 最大連續子串行和
動態規劃 最大連續子串行和 問題描述 給定乙個數字序列a1,a2,an,求i,j 1 i j n 使得ai aj最大,輸出這個最大和。樣例 211 413 5 2顯然 11 4 13 20 為和最大的選取情況,因此最大和為20 下面介紹動態規劃的做法,複雜度為o n 讀者會發現其實左端點的列舉是沒有...