如题
因为要求的是连续子序列和的最大值,所以分类应为c[i]要不要i之前的序列
对于第i个元素,
1)要i之前的序列,则table[i1]+c[i]
2)不要i之前的序列,则c[i]
取两者里边的最大值给了table[i]
numpy.argmax(list) :返回列表中最大元素的索引
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])