動態規劃
一.簡介
在acm中,動態規劃是一種將乙個複雜問題分為多個簡單的小問題的思想。在使用動態規劃時,原問題須滿足重疊子問題和最優子結構這個性質。
運用動態規劃思想設計的演算法一般比樸素的演算法高效很多。因為在計算某個狀態的時候,已經被計算的子問題將不需要重複計算,而是呼叫之前儲存下的結果。這樣就減少了大量的重複計算。
動態規劃思想的本質是在乙個有向無環圖中,求乙個函式的最優值,也可以看做是乙個加入了「記憶化」的搜尋過程。
二.演算法分類
1.基礎dp ★★★
1.1 整數劃分
五種1.2 雙向dp
2.鏈(環)式動態規劃 ★★★
2.1揹包問題
01揹包
完全揹包
多重揹包
混合揹包
二維費用揹包
分組揹包
2.2 連續序列
最大連續子串行 mcs
最長公共子串行lcs (有的會用到滾動陣列)
最長上公升子串行 lis
最大連續子矩陣
首尾相連的最大欄位和
最大m子段和
3. 其他較難動態規劃(常用到狀態壓縮)
3.1區間dp ★★
3.2概率(期望)dp ★★
3.3數字dp★
3.4樹形dp★
3.5集合dp
3.6斜率dp
三.模板整理
分類中★號越多越需要整理,但注意★號越多也更需要先理解。因為比賽中遇到的往往都是原演算法分類的變形,要求可以靈活地修改模板。
四.練習題集
nyoj動態規劃分類
hduoj 46道 見資料夾(有幾道比較難,可放到最後做)
xynuoj 動態規劃分類
五.其他
動態規劃是一種用途很廣的問題求解方法,它本身並不是乙個特定的演算法,而是一種思想,一種手段。動態規劃的理論性和實踐性都比較強,一方面需要理解「狀態」、「狀態轉移」、「最優子結構」、「重疊子問題」等概念,另一方面又需要根據題目的條件靈活設計演算法,可以這麼說,對動態規劃的掌握情況在很大程度上能直接影響乙個選手的分析和建模能力。
ACM模組解析之 STL
stl標準模板庫 一.簡介 stl和資料結構在icpc競賽的作用類似,大部分情況都是題目很難用樸素演算法在規定的時間和記憶體條件中完成,才不得不用的一種優化方式。在acm競賽中,需要用到陣列 字串 佇列 堆疊 鍊錶 平衡二叉檢索樹等資料結構和排序 搜尋演算法,以提高程式的時間 空間執行效率。這些資料...
學習ACM之動態規劃
分類 acm演算法 2011 06 16 22 15 145人閱讀收藏 舉報themes 優化遊戲 通過上一章的學習,相信大家對動態規劃已經有了乙個初步的了解,如果您將上一章的推薦習題全部掌握,那麼您可以開始這一章的學習內容了。這一章,我們將講解一些動態規劃的設計技巧。相信大家在做動態規劃一類題目的...
acm 動態規劃
學習參考 就是倒推 尋找遞推式 難點 然後用陣列將資料計算出來 最後直接呼叫得到答案 01揹包問題 for i 0 i 例題一 洛谷oj 開心的金明 include include using namespace std const int max 100001 long long dp max i...