假設有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...