動態規劃問題之間隔數字問題

2021-10-05 13:18:21 字數 738 閱讀 3438

1、解題思路:

1)遞迴思路:顯然,這裡的陣列中的每乙個數都有兩種可能,選擇或者不選擇,選擇的話則arr[i-1]不能選,不選的話則看arr[i-1]是否要選,這裡的遞迴出口在如果選擇i=0時,return arr[0],選擇i=1時,選擇arr[0]和arr[1]中大的。(這裡可以化成一棵二叉樹的形式,便於理解)

2)非遞迴思路:遍歷這個陣列,使用乙個陣列opt[i]來記錄前面選的數的和,其餘的和遞迴一樣,**選擇當前元素,opt[i]=opt[i-2]+arr[i],不選的話opt[i]=opt[i-1],**最後更新opt[i]的值時,選擇前面兩者大的即可。

2、實現如下:

1)遞迴實現

intdp(

int arr,

int i)

if(i==1)

else

}

2)非遞迴實現

int

dp_opt

(int arr,

int size)

return opt[size -1]

;}

總結:這裡使用遞迴不好,因為相同的i對應的dp會重複算很多次,但是非遞迴很好的解決了這個問題,算出乙個,就會被記錄在陣列中,不會被重複算。

動態規劃問題

思想 如果乙個問題是由交疊的子問題所構成,那麼我們就可以用動態規劃技術來解決它。一般來說,這樣的子問題出現在對給定問題求解的遞迴關係中。這個遞推關係包含了相 同問題的更小子問題的解。動態規劃法建議,與其對交疊子問題一次又一次的求解,不如把每個較小子問題只求解一次並把結果記錄在表中。例題 0 1揹包問...

動態規劃問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 ctest有n個蘋果,要將它放入容量為v的揹包。給出第i個蘋果的大小和價錢,求出能放入揹包的蘋果的總價錢最大值。輸入 有多組測試資料,每組測試資料第一行為2個正整數,分別代表蘋果的個數n和揹包的容量v,n v同時為0時結束測試,...

動態規劃問題

以下內容基於個人理解。一 什麼是動態規劃 動態規劃 dp 演算法,指的是 乙個問題的解決是依賴於若干個和該問題相似,但比該問題的問題規模更小的問題時,所採用的一種演算法。動態規劃是自底向上的思考問題的方法,通常要從最底層的問題開始考慮。而這類問題的特點是 解決所有本層次問題後,就可以解決上一層的問題...