動態規劃演算法

2021-08-27 04:02:14 字數 1173 閱讀 9945

求arr[1,2,4,1,7,8,3]中選取若干不連續的數字的的最大和。

[3] 取兩者的最大值作為最後的選擇結果,即為最優解。

# 動態規劃非遞迴版

import numpy as np

arr = [1,2,4,1,7,8,3]

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)):

opt[i] = max(opt[i-2] + arr[i] ,opt[i-1])

return opt[len(arr)-1]

print(dp_opt(arr))

從arr[3,34,4,12,5,2]中選取若干數字,判斷是否存在乙個和為s的序列.

取兩者的並集(a or b)即可. (只要有一種情況滿足即為正確)

# 動態規劃非遞迴版

import numpy as np

arr = [3,34,4,12,5,2]

defdp_subset

(arr,s):

subset = np.zeros((len(arr), s+1) ,dtype= bool)

subset[:,0] = true

subset[0,:] = false

subset[0,arr[0]] = true

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

for s in range(1, s+1):

if arr[i] > s:

subset[i][s] = subset[i-1][s] # 不選

else:

a = subset[i-1, s - arr[i]]

b = subset[i-1, s]

subset[i][s] = a or b

r,c = subset.shape

return subset[r-1 , c-1]

dp_subset(arr,9)

動態規劃演算法

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

動態規劃演算法

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

動態規劃演算法

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