撿拾硬幣 動態規劃 python

2021-09-24 22:56:05 字數 1072 閱讀 5836

假設有n個硬幣排在一行,要求不能拾取相鄰的兩個硬幣,已獲得累加面值最大的拾取子串行

動態規劃 

對於第i個硬幣,

1)拾取第i個硬幣,則table[i-2]+c[i]

2)不拾取第i個硬幣,則table[i-1]

取兩者裡邊的最大值給了table[i]

(一直都沒有給列表分配儲存空間的習慣,以為python裡邊不需要來著)

補充一點列表逆序輸出的知識:

list[::-1]    將列表list整個逆序輸出

list[3::-1] 將下標為0~3的元素逆序輸出

#求table

def coinamount(c):

table=[none]*(len(c)+1)

table[0]=0

table[1]=c[0]

for i in range(2,len(c)+1):

table[i]=max(table[i-2]+c[i-1],table[i-1])

return table

#回溯def back(table,c):

select=

lent=len(table)-1

i=lent

while i>=1:

if table[i]>table[i-1]: #選最後乙個

i-=2

else:

i-=1

return select

if __name__=="__main__":

c=[5,1,2,10,6,2]

temp=coinamount(c)

select=back(temp,c)

print("動態規劃表:")

print(temp)

print(select[::-1])

python知識撿拾 閉包

例項1 defsay word def name name print word,name return name hi say 你好 hi 小明 你好 小明 bye say 再見 hi 小明 再見 小明例項2 deffunc res defput x defget return res retur...

python知識撿拾 內建方法

getattr setattr 和 getattribute 當讀取物件的某個屬性時,python會自動呼叫 getattr 方法。例如fruit.color將轉換為fruit.getattr color 例項 class fruit object def init self,color red p...

python知識撿拾 模組內建函式

如 def sum x 1,y 2 return x y print sum,1,3 2.filter 對某個序列做過濾處理 filter func or none,sequence 引數func是自定義的過濾函式,在函式func item 中定義過濾的規則,如果func為 none 則過濾項ite...