連續子串行和的最大值 動態規劃 python

2021-09-24 23:00:12 字數 932 閱讀 6047

如題

因為要求的是連續子串行和的最大值,所以分類應為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 讀者會發現其實左端點的列舉是沒有...