動態規劃總結
一、解釋:
解決多階段策略問題的一種方法,運用最優性原理,排除重複計算,用空間換時間的演算法。
二、適用的題目型別:
1.問題具有多階段的決策
2.每個階段對應乙個狀態(狀態變數)
3.每個階段有乙個決策(不同的決策導致下乙個階段不同的狀態)
4.每個階段的最優解可以遞迴地歸結為下乙個階段各個可能狀態的最優解問題
三、一般的解題步驟
1.判斷問題是否具最優子結構性質者
2.分階段
3.建立狀態轉移方程(遞迴公式)
4.找出邊界條件
5.將已知的邊界值帶入方程
6.遞迴求解
四、經典問題:
樓梯問題、最大m欄位和問題等
五、動態規劃的揹包問題
(1)01揹包
特點:每種物品僅有一件,可以選擇放或不放,求最大價值
狀態轉移方程:f[i][v]=max;
偽**:(空間優化)
for i=1..n
for v=v..0
f[i][v]=max
(若要求恰好裝滿揹包,初始化的時候除了將f0]=0,其餘的均為負無窮;
若沒有要求必須裝滿,初始化的時候將f[0...v]都設成0)
(2)完全揹包
特點:每種物品有n件,可以用無限次,求費用總和不超過容量的最大價值
狀態轉移方程:f[i][v]=max
(簡單優化:將費用大於容量的去掉,兩個物品相比,若乙個的費用高並且重量小則直接去掉)
(3)多重揹包
特點: n種物品和容量為v的揹包,第i種物品最多有n[i]件可用,求費用總和不超過容量的最大價值
優化:二進位制思想:多重揹包中的乙個物品變成0-1揹包中的多個物品
(4)分組的揹包
特點:n件物品容量為v,這些物品被分若干組,每組中的物品發生衝突時最多選一件。轉化為每組物品有若干種策略
狀態轉移方程:f[k][v]=max
六、區間動態規劃
區間動態一般都是將乙個區間問題不斷劃分為更小的區間甚至乙個元素組成的區間,列舉他們的組合,求合併後的最優值。
區間動態規劃的模板**:
for(int p=1;p<=n;p++);
dp[i][j]=max{dp[i][k]+dp[k+1][j]+w[i][j];
專題三總結
這個專題講的是動態規劃的內容,到現在為止,已經做了3 個專題了,我個人認為,動態規劃這個專題還是挺好做的,沒有剛開始老師說的的那麼難。先來點理論知識吧。所謂動態規劃,它是解決多階段決策問題的一種方法。動態規劃的指導思想就是在做每一步決策時,列出各種可能的區域性解,依據某種判定條件,捨棄那些肯定不能得...
專題三 動態規劃總結
在這篇部落格裡我寫一下做了乙個月的dp之後對dp的粗淺認識,並附上一些學習資源。如果乙個問題的最優解包含其子問題的最優解,我們就稱此問題具有最優子結構。摘自 演算法導論 也就是說,具有最優子結構的問題的最優解一定是由其各個子問題的最優解組合而成的。我覺得dp最關鍵的就是找出狀態轉移方程,即找出問題的...
第三專題總結(動態規劃)
1.定義 動態規劃是解決多階段決策問題的一種方法,也是一種排除重複計算的演算法,更具體的說,動態規劃就是用空間換取時間。2.動態規劃問題具有以下基本特徵 1 問題具有多階段決策的特徵。2 每一階段都有相應的 狀態 與之對應,描述狀態的量稱為 狀態變數 3 每一階段都面臨乙個決策,選擇不同的決策將會導...