(轉)dp動態規劃分類詳解

dp動態規劃分類詳解

轉自:http://blog.csdn.NET/cc_again/article/details/25866971

?

動態規劃一直是ACM競賽中的重點,同時又是難點,因為該算法時間效率高,代碼量少,多元性強,主要考察思維能力、建模抽象能力、靈活度。

?

******************************************************************************************

動態規劃英語Dynamic programming,DP)是一種在數學、計算機科學經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。 動態規劃常常適用于有重疊子問題最優子結構性質的問題,動態規劃方法所耗時間往往遠少于樸素解法。

動態規劃背后的基本思想非常簡單。大致上,若要解一個給定問題,我們需要解其不同部分(即子問題),再合并子問題的解以得出原問題的解。 通常許多子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,從而減少計算量: 一旦某個給定子問題的解已經算出,則將其記憶化存儲,以便下次需要同一個子問題解之時直接查表。 這種做法在重復子問題的數目關于輸入的規模呈指數增長時特別有用。

動態規劃問題滿足三大重要性質

最優子結構性質如果問題的最優解所包含的子問題的解也是最優的,我們就稱該問題具有最優子結構性質(即滿足最優化原理)。最優子結構性質為動態規劃算法解決問題提供了重要線索。

子問題重疊性質子問題重疊性質是指在用遞歸算法自頂向下對問題進行求解時,每次產生的子問題并不總是新問題,有些子問題會被重復計算多次。動態規劃算法正是利用了這種子問題的重疊性質,對每一個子問題只計算一次,然后將其計算結果保存在一個表格中,當再次需要計算已經計算過的子問題時,只是在表格中簡單地查看一下結果,從而獲得較高的效率。

無后效性:將各階段按照一定的次序排列好之后,對于某個給定的階段狀態,它以前各階段的狀態無法直接影響它未來的決策,而只能通過當前的這個狀態。換句話說,每個狀態都是過去歷史的一個完整總結。這就是無后向性,又稱為無后效性。

********************************************************************************************

?

動態規劃分類有很多劃分方法,網上有很多是按照狀態來分,分為一維、二維、區間、樹形等等。我覺得還是按功能即解決的問題的類型以及難易程度來分比較好,下面按照我自己的理解和歸納,把動態規劃的分類如下:

一、簡單基礎dp

這類dp主要是一些狀態比較容易表示,轉移方程比較好想,問題比較基本常見的。主要包括遞推、背包、LIS(最長遞增序列),LCS(最長公共子序列),下面針對這幾種類型,推薦一下比較好的學習資料和題目。

1、遞推:

遞推一般形式比較單一,從前往后,分類枚舉就行。

簡單:

hdu 2084 數塔?簡單從上往下遞推

hdu 2018 母牛的故事?簡單遞推計數

hdu 2044 一只小蜜蜂...?簡單遞推計數(Fibonacci)

hdu 2041 超級樓梯?Fibonacci

hdu 2050 折線分割平面?找遞推公式

推薦:

CF 429B B.Working out?四個角遞推

zoj 3747 Attack on Titans?帶限制條件的計數遞推dp

uva 10328 Coin Toss?同上題

hdu 4747 Mex?

hdu 4489 The King's Ups and Downs

hdu 4054 Number String

2、背包

經典的背包九講:http://love-oriented.com/pack/

推薦博客:http://blog.csdn.net/woshi250hua/article/details/7636866

主要有0-1背包、完全背包、分組背包、多重背包。

簡單:

hdu 2955 Robberies?01背包

hdu 1864 最大報銷額?01背包

hdu 2602 Bone Collector?01背包

hdu 2844 Coins?多重背包

hdu 2159 FATE?完全背包

推薦:

woj 1537 A Stone-I? 轉化成背包

woj 1538 B Stone-II?轉化成背包

poj 1170 Shopping Offers?狀壓+背包

zoj 3769 Diablo III?帶限制條件的背包

zoj 3638 Fruit Ninja?背包的轉化成組合數學

hdu 3092 Least common multiple?轉化成完全背包問題

poj 1015 Jury Compromise?擴大區間+輸出路徑

poj 1112 Team Them UP?圖論+背包

3、LIS

最長遞增子序列,樸素的是o(n^2)算法,二分下可以寫成o(nlgn):維護一個當前最優的遞增序列——找到恰好大于它更新

簡單:

hdu 1003 Max Sum

hdu 1087 Super Jumping!

推薦:

uva 10635 Prince and Princess?LCS轉化成LIS

hdu 4352 XHXJ's LIS 數位dp+LIS思想

srm div2 1000??狀態壓縮+LIS

poj 1239 Increasing Sequence?兩次dp

4、LCS

最長公共子序列,通常o(n^2)的算法

hdu 1503 Advanced Fruits

hdu 1159 Common Subsequence

uva 111 History Grading?要先排個序

poj 1080 Human Gene Functions

?

二、區間dp

推薦博客:http://blog.csdn.net/woshi250hua/article/details/7969225

區間dp,一般是枚舉區間,把區間分成左右兩部分,然后求出左右區間再合并。

poj 1141 Brackets Sequence?括號匹配并輸出方案

hdu 4745 Two Rabbits?轉化成求回文串?

zoj 3541 The Last Puzzle??貪心+區間dp

poj 2955 Brackets

hdu 4283 You Are the One? 常見寫法

hdu 2476 String Printer?

zoj 3537 Cake

CF 149D Coloring Brackets

zoj 3469 Food Delivery

?

三、樹形dp

比較好的博客:http://blog.csdn.net/woshi250hua/article/details/7644959

一篇論文:http://doc.baidu.com/view/f3b19d0b79563c1ec5da710e.html

樹形dp是建立在樹這種數據結構上的dp,一般狀態比較好想,通過dfs維護從根到葉子或從葉子到根的狀態轉移。

hdu 4123 Bob's Race?二分+樹形dp+單調隊列

hdu 4514? 求樹的直徑

poj 1655 Balancing Act?

hdu 4714 Tree2Cycle?思維

hdu 4616 Game

hdu 4126 Genghis Kehan the Conqueror?MST+樹形dp?比較經典

hdu 4756 Install Air Conditioning?MST+樹形dp 同上

hdu 3660 Alice and Bob's Trip?有點像對抗搜索

CF 337D Book of Evil??樹直徑的思想 思維

hdu 2196 Computer?搜兩遍

?

四、數位dp

推薦一篇論文:http://wenku.baidu.com/view/d2414ffe04a1b0717fd5dda8.html

數位dp,主要用來解決統計滿足某類特殊關系或有某些特點的區間內的數的個數,它是按位來進行計數統計的,可以保存子狀態,速度較快。數位dp做多了后,套路基本上都差不多,關鍵把要保存的狀態給抽象出來,保存下來。

hdu 2089 不要62?簡單數位dp

hdu 3709 Balanced Number?比較簡單

CF 401D Roman and Numbers?狀壓+數位dp

hdu 4398 X mod f(x)?把模數加進狀態里面

hdu 4734 F(x)??簡單數位dp

hdu 3693 Math teacher's homework?思維變換的數位dp

hdu 4352 XHXJ's LIS 數位dp+LIS思想

CF 55D Beautiful Numbers? 比較巧妙的數位dp

hdu 3565 Bi-peak Numbers?比較難想

CF 258B Little Elephant and Elections?數位dp+組合數學+逆元

?

五、概率(期望) dp

推薦博客:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html

推薦博客:http://blog.csdn.net/woshi250hua/article/details/7912049

推薦論文:

《走進概率的世界》

《淺析競賽中一類數學期望問題的解決方法》

《有關概率和期望問題的研究》

一般來說概率正著推,期望逆著推。有環的一般要用到高斯消元解方程。期望可以分解成多個子期望的加權和,權為子期望發生的概率,即?E(aA+bB+...)?=?aE(A)?+?bE(B)?+...?

ural 1776 Anniversiry Firework?比較基礎

hdu 4418 Time travel??比較經典BFS+概率dp+高斯消元

hdu 4586 Play the Dice?推公式比較水

hdu 4487 Maximum Random Walk?

jobdu 1546 迷宮問題?高斯消元+概率dp+BFS預處理

hdu 3853 LOOPS?簡單概率dp

hdu 4405 Aeroplane chess?簡單概率dp,比較直接

hdu 4089 Activation?比較經典

poj 2096 Collecting Bugs?題目比較難讀懂

zoj 3640 Help me Escape?從后往前,比較簡單

hdu 4034 Maze?經典好題,借助樹的概率dp

hdu 4336 Card Collector?狀態壓縮+概率dp

hdu 4326 Game??這個題狀態有點難抽象

?

六、狀態壓縮dp

這類問題有TSP插頭dp等。

推薦論文:http://wenku.baidu.com/view/ce445e4f767f5acfa1c7cd51.html

推薦博客:http://blog.csdn.net/sf____/article/details/15026397

推薦博客:http://www.notonlysuccess.com/index.php/plug_dp/

hdu 1693 Eat the Trees ?插頭dp

hdu 4568 Hunter?最短路+TSP

hdu 4539??插頭dp

hdu 4529 狀壓dp

poj 1185 炮兵陣地

poj 2411 Mandriann's Dream?輪廓線dp

hdu 3811 Permutation

poj 1038

poj 2441

hdu 2167

hdu 4026

hdu 4281

?

七、數據結構優化的dp

有時盡管狀態找好了,轉移方程的想好了,但時間復雜度比較大,需要用數據結構進行優化。常見的優化有二進制優化、單調隊列優化、斜率優化、四邊形不等式優化等。

1、二進制優化

主要是優化背包問題,背包九講里面有介紹,比較簡單,這里只附上幾道題目。

hdu 1059 Diving?

hdu 1171 Big Event in Hdu

poj 1048 Follow My Magic

2、單調隊列優化

推薦論文:http://wenku.baidu.com/view/4d23b4d128ea81c758f578ae.html

推薦博客:http://www.cnblogs.com/neverforget/archive/2011/10/13/ll.html

hdu 3401 Trade??

poj 3245 Sequece Partitioning?二分+單調隊列優化

3、斜率優化

推薦論文:用單調性優化動態規劃

推薦博客:http://www.cnblogs.com/ronaflx/archive/2011/02/05/1949278.html

hdu 3507 Print Article

poj 1260 Pearls

hdu 2829 Lawrence

hdu 2993 Max Average Problem

4、四邊形不等式優化

推薦博客:http://www.cnblogs.com/ronaflx/archive/2011/03/30/1999764.html

推薦博客:http://www.cnblogs.com/zxndgv/archive/2011/08/02/2125242.html

hdu 2952 Counting Sheep

poj 1160 Post Office

hdu 3480 Division

hdu 3516 Tree Construction

hdu 2829 Lawrence

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394403.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394403.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394403.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

strcmp可以比較數組么_大家都用過百度云,但你面試過百度云么

作者:黃小斜百度研發面經百度智能云軟件研發工程師百度智能云研發崗好像是做控制臺方面的組一面:1自我介紹,項目2 static關鍵字有什么用,static修飾不同東西時有什么作用,內部類用static修飾和不用static修飾有何區別。…

leetcode785. 判斷二分圖(dfs和bfs染色)

給定一個無向圖graph,當這個圖為二分圖時返回true。 如果我們能將一個圖的節點集合分割成兩個獨立的子集A和B,并使圖中的每一條邊的兩個節點一個來自A集合,一個來自B集合,我們就將這個圖稱為二分圖。 graph將會以鄰接表方式給出…

bdd cucumber_如何使用BDD構建堅如磐石的Ruby on Rails應用

bdd cucumberby Marko Anastasov通過Marko Anastasov 如何使用BDD構建堅如磐石的Ruby on Rails應用 (How to build rock-solid Ruby on Rails apps with BDD) 了解通過行為驅動開發來構建可持續Web應用程序的最佳實踐。 (Learn best practices for building sustainable web a…

go kegg_KEGG分析及可視化

上一篇推文中我們解釋了GO富集分析及可視化(GO富集分析及可視化),除了GO富集分析,我們經常在paper中看到KEGG分析,KEGG是什么呢,Kyoto Encyclopedia of Genes and Genomes,京都基因和基因組百科…

IntelliJ IDEA注冊碼

IntelliJ IDEA注冊碼 http://idea.lanyus.com/ 1.導航欄下 2.help下 3.register點擊 4.單選Activation code 5.粘貼注冊碼 轉載于:https://www.cnblogs.com/YUJIE666/p/10662561.html

單詞本.

offset 偏移量 charset字符集 str 代表String字符串 IgnoreCase忽略大小寫 Object 對象 argument 參數 if and only if:當且僅當 value:值 specified:指定 Parameters:參數 iterator:迭代器 invoke:調用 variable:變量 resolved:解決 sequnence 序列 default:默認轉載于:http…

leetcode931. 下降路徑最小和(動態規劃)

給定一個方形整數數組 A,我們想要得到通過 A 的下降路徑的最小和。 下降路徑可以從第一行中的任何元素開始,并從每一行中選擇一個元素。在下一行選擇的元素和當前行所選元素最多相隔一列。 示例: 輸入:[[1,2,3],[4,5,6],[7,8,9…

lvm使用

注:新添加的硬盤,如果沒有分區,可以直接使用pvcreate進行創建,然后用vgextend進行擴展如果新添加的硬盤經過分區,則要把需要擴展的分區修改為8e格式,則進行擴展以上內容實測~相關概念:pv:物理卷…

python django用戶登錄系統_Django實現用戶注冊登錄

學習Django中:試著著寫一個用戶注冊登錄系統,開始搞事情 O(∩_∩)O哈哈~Ubuntupython 2.7.12Django 1.10.4IDE:PycharmBootstrap(其實沒怎么用~~)新建項目:(我是直接用pycharm直接生成的)使用終端:(創建項目)django-ad…

ubantu 添加防火墻策略_ubuntu安裝防火墻并策略配置

1、安裝ubuntu防火墻sudo apt-get install ufw啟用sudo ufw enablesudo ufw default deny作用:開啟了防火墻并隨系統啟動同時關閉所有外部對本機的訪問(本機訪問外部正常)。關閉sudo ufw disable查看防火墻狀態sudo ufw status2、開啟/禁用相應端口或服務舉例sudo u…

如何使用React Native構建嵌套的抽屜菜單

by Dhruvdutt Jadhav由Dhruvdutt Jadhav 如何使用React Native構建嵌套的抽屜菜單 (How to build a nested drawer menu with React Native) Screen space is a precious commodity on mobile. The drawer menu (or “hamburger menu”) is one of the most popular navigatio…

c# WebApi之接口返回類型詳解

c# WebApi之接口返回類型詳解 https://blog.csdn.net/lwpoor123/article/details/78644998 轉載于:https://www.cnblogs.com/hwubin5/p/10665006.html

第十一次作業

1。題目&#xff1a; 輸入一個字符串&#xff0c;統計大寫字母、小寫字母、空格、數字和其他字符的個數。(要求用字符數組 代碼 #include<stdio.h> #define n 100 int main() {char a[n];int i,a10,b0,c0,d0;printf("輸入字符串&#xff1a;\n");gets(a);for(i…

Python Configparser模塊讀取、寫入配置文件

寫代碼中需要用到讀取配置&#xff0c;最近在寫python&#xff0c;記錄一下。 如下&#xff0c;假設有這樣的配置。 [db] db_host127.0.0.1 db_port3306 db_userroot db_pass [concurrent] thread200 processor400 可以使用ConfigParser模塊來讀取、寫入配置…

leetcode714. 買賣股票的最佳時機含手續費(動態規劃)

給定一個整數數組 prices&#xff0c;其中第 i 個元素代表了第 i 天的股票價格 &#xff1b;非負整數 fee 代表了交易股票的手續費用。 你可以無限次地完成交易&#xff0c;但是你每筆交易都需要付手續費。如果你已經購買了一個股票&#xff0c;在賣出它之前你就不能再繼續購買…

寧宛 機器人_全文閱讀 .007 忠犬機器人

全文閱讀 .007 忠犬機器人”其實光看i5高大的身軀、泛著金屬光澤的外殼&#xff0c;很難想象它能把照顧人的事情做的那么細致。這張同樣自帶程序的金屬床在i5的操作下&#xff0c;根據寧宛自身的體重及骨密度&#xff0c;調整出最適合她的硬度、角度及凹陷程度。空間跳躍……早…

servlet中文亂碼_10分鐘快速掌握Servlet相關基礎知識

Servlet的學習路線1、 創建Servlet2、 Servlet的相關配置3、 Servlet的生命周期4、 HttpServletRequest接口5、 HttpServletResponse接口6、 HttpSession接口7、 Filter、Listener接口Servlet的相關配置1、 創建Servlet extends HttpServlet2、 配置Serlvet第1種配置方式: web.…

蓋茨比喬布斯_如何使用蓋茨比創建您的博客并通過手機進行處理

蓋茨比喬布斯by Hu Chen胡Hu 如何使用蓋茨比創建您的博客并通過手機進行處理 (How to use Gatsby to create your blog and work on it from your phone) Recently, I decided to migrate my blog to Gatsby. Gatsby is a blazing fast static site generator based on React.…

python之collections之有序字典(OrderedDict)

一、定義OrderedDict是對字典的補充&#xff0c;它記住了字典元素的添加順序。eg&#xff1a; 二、OrderedDict相關方法def clear(self): # real signature unknown; restored from __doc__ """     od.clear() -> None. Remove all items from od. …

進階4:hive 安裝

安裝包&#xff1a; apache-hive-2.1.1-bin.tar.gz 安裝步驟&#xff1a; 1.上傳 apache-hive-2.1.1-bin.tar.gz 到linux; 2.解壓文件&#xff1a; tar zxvf apache-hive-2.1.1-bin.tar.gz 3.安裝mysql (僅支持mysql 5.7以下版本&#xff0c;不支持5.7或更高版本&#xff0c…