動態規劃的案例python(2)

2021-10-04 22:41:03 字數 1740 閱讀 8670

1題目:給乙個陣列和乙個數,從這個陣列找出幾個數的和是這個數。

比如 9,如果可以找到比如4+5=9,則返回true

動態規劃分析:

arr =

下標i:0 1 2 3 4 5

這裡我們設定函式subset(i, s), 我們輸入i 是下標,s是要組合的數。

開始當i 是5時,表示為subset(arr[5],9),後面的s減去選擇的數。

當選擇下標為5的這個 2時,subset(arr[5],7),不選擇2時,subset(arr[4],6)

然後就可以遞迴了,現在來找出口

第乙個出口:當在某個i上已經得出和為s的了,就可以停止,即表示為subset(arr[i],0) 時。

if s ==0:

return

true

第二個出口:當(arr[0],3) ,當i= 0,s還有值, 剛好最後乙個數能組合成這個數才能返回true

否則就是false.

if i ==0:

return arr[0]

== s

第三個出口:

當出現arr[i]比s大,就只能走不選的那條路。比如 arr[2]是12,s是9,只能選擇不選arr[2]。

if arr[i]

> s:

return subset(arr, i-

1, s)

可以得出結論:

一開始是subset(arr,i ,s)

然後選是subset(arr,i -1,s-arr[i])or 不選是subset(arr,i -1,s-arr[i])

**實現:

arr =[3

,34,4

,12,5

,2]def

rec_subset

(arr, i, s)

:if s ==0:

return

true

elif i ==0:

return arr[0]

== s

elif arr[i]

> s:

return rec_subset(arr, i-

1, s)

else

: a = rec_subset(arr, i-

1, s-arr[i]

) b = rec_subset(arr, i-

1, s)

return a or b

print

(rec_subset(arr,5,

9))print

(rec_subset(arr,5,

10))print

(rec_subset(arr,5,

11))print

(rec_subset(arr,5,

12))print

(rec_subset(arr,5,

13))

結果是 13拼不出來,其他歐克,

true

true

true

true

false

上面使用遞迴,時間複雜度比較高。

使用陣列來完成優化。需要安裝numpy,我沒安裝,暫時就不寫了。。。

動態規劃的案例python(1)

一組數中不能相鄰的幾個數選出來組成的和最大 比如 4,1,1,9,1 我們可以選擇 4,1,1 1,9 4,9 但是只有 4,9 比較大 例如 標號i 0 1 2 3 4 5 6 arr 1 2 4 1 7 8 3 設opt i 為最佳選法。我們倒著看,開始是opt 6 如果選6號位的3,arr 1...

動態規劃經典案例

程式設計師 面試指南 it名企演算法與資料結構題目最優解 左程雲 有n級台階,乙個人每次上一級或者兩級,問有多少種走完n級台階的方法,當n為1時,f n 1,n為2時,f n 2,就是說當台階只有一級的時候,方法數是一種,台階有兩級的時候,方法數為2。那麼當我們要走上n級台階,必然是從n 1級台階邁...

python2之字元編碼案例分析(1)

1.先看 coding utf 8 當你不指定編碼格式,系統預設編碼是ascii,意味著如果你的py檔案中有中文,那麼執行會報錯 defa local print type local print hahaha哈哈哈 local if name main print sys.getdefaulten...