動態規劃演算法例題

2021-08-24 23:36:54 字數 908 閱讀 7341

題目:

有乙個序列[3,-5, 9,0,-2,8,-3,9,5,-9,-2,8],取其中不相鄰子串行,求可能的最大值是多少?

思路:

用動態規劃來求解。

對於最後乙個元素,可以分成兩種情況,取還是不取。如果取,那麼我們在8的基礎上再加上前10個元素組成的序列求得的最大值,如果不取,那麼我們考慮前11個元素組成的序列即可。假設opt(i)表示(序列長度為i)根據題意所求的最大值。

則有,opt(12) = max(opt(10)+8, opt(11))

將式子一般化可得,opt(i) = max(opt(i-2)+8, opt(i-1))

下面用遞迴和迭代兩種方法用**實現:

import numpy as np

arr =[3,-5, 9,0,-2,8,-3,9,5,-9,-2,8]

defrec_opt

(arr,i):

if i==0:

return arr[0]

elif i==1:

return max(arr[0],arr[1])

else:

a = rec_opt(i-2)+arr[i]

b = rec_opt(i-1)

return max(a,b)

defdp_opt

(arr):

opt = np.zeros(len(arr))

opt[0] = arr[0]

opt[1] = max(arr[0],arr[1])

for i in range(2,len(arr)):

a = opt[i-2]+arr[i]

b = opt[i-1]

opt[i] = max(a,b)

return opt[-1]

動態規劃演算法

一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...

動態規劃演算法

動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...

動態規劃演算法

動態規劃演算法的思路 動態規劃法即 dynamic programming method dp 是系統分析中的種常用方法。動態規劃法是20世紀50年代由貝爾曼 r.bellman 等人提出的,用來解決多階段決策過程問題的一種最優化方法。多階段決策過程是指把研究問題分成若干個相互聯絡的階段,由每個階段...