動態規劃小結

2021-07-05 05:24:43 字數 1212 閱讀 6901

現在做一下動態規劃的小結

1.揹包問題

這是一類超級經典很基礎的動態規劃,好多動態規劃題目都能用揹包的方法寫出或者是揹包的變形.

這些在揹包九講中說的很清楚:鏈結(這是網上我隨便找的乙個講的比較全的部落格),這些揹包問題給我的乙個啟發就是:轉換,通過一系列的操作,轉換為01揹包

揹包給我的感受:很大一部分狀態的轉移,都是新增乙個量,然後結合之前的最優解進而推出當前最優解,而當決策是類似的要不要這個新增量的時候,這很明顯就是揹包型別或變形的題目.

比如:

這明顯是揹包問題,可是卻比揹包多出了乙個限制:在購買一類物品的時候,我們必須先購買這類物品的籃子之類的.

這題的狀態和轉移很容易弄錯,不能分別以買第i類商品花費j元所能得到的最多價值,然後再來乙個總的dp[i][j]:而以第i類商品買不買為決策,這樣做弊端是i類商品投入的花費範圍太大,所以不能這樣建立狀態,重新換乙個狀態.

新狀態:弄成dp[i][j][0]為前i類商品不買第i類商品得到的最優解(這個既是乙個狀態又是另乙個狀態的中轉)

dp[i][j][1]為前i類商品並買第i類商品得到的最優解

剩下的狀態轉移就簡單了

這題給我啟發就是,有時候狀態轉移不好進行,可以把狀態繼續細分多加一維狀態,

方便轉移,這樣例子很多,比如樹數形dp中

多加一維[0]和[1](或更多)以區分父子節點,又比如完美服務中用來區分不同狀態和之前我做過的一顆樹種距離為k的有多少個點都能夠用這種方法完美解決

還有一類揹包變形是:uva12589_learning vector

之前的揹包當前選擇對於之後的選擇是沒有影響的,可這題當前所選的向量對之後選擇會有影響,因為向量形成的面積是由當前三角形面積加上由之前累加出來的高和現在的寬形成的矩形面積之和,所以在狀態轉移的時候必須多附加乙個高度h的屬性,為了高效用到了記憶化搜尋

2.區間dp

這類題目,我做過最典型的就是

這道題目用到了上面所說的多開一維方便狀態轉移的技巧!!!

而且中間還用到了一些優化技巧,比如利用一些已知狀態的來避免重複大量計算求和,這種優化往往很關鍵

4.狀態壓縮dp

這類題寫的不多,遇到的經典有

動態規劃做多了,感覺好多題目都是在

動態轉移

未完待續

動態規劃小結

1.最長上公升子串行問題 給出乙個由n個數組成的序列x 1.n 找出它的最長單調上公升子串行。即求最大的m和a1,a2 am,使得a12.動態規劃求解思路分析 o n 2 經典的o n 2 的動態規劃演算法,設a i 表示序列中的第i個數,f i 表示從1到i這一段中以i結尾的最長上公升子串行的長度...

動態規劃小結

近期覺得動態規劃的題目一直不能夠很好的理解,自己也不能很好的掌握,因此就做了一定量的練習,使得自己能夠掌握這一類題目的思路。動態規劃在維基百科的定義為 一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃的思想為 若要解決乙...

動態規劃 小結

關鍵字 動態規劃 動態規劃其實質上是通過開闢記錄表,記錄已求解過的結果,當再次需要求解的時候,可以直接到 那個記錄表中去查詢,從而避免重複計算子問題來達到降低時間複雜度的效果。實際上是乙個空間 換時間的演算法。動態規劃,通常可以把指數級的複雜度降低到多項式級別。一般演算法書都會講能不能用動態規劃來求...