如題
因為要求的是連續子序列和的最大值,所以分類應為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]
select.append(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])
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
