一、知識點整理
(一)、動態規劃是解決多階段策略問題的一種方法,運用最優性原理,排除重複計算,用空間換時間的演算法。
(二)、動態規劃適用的題目型別有以下幾個特點:
1.問題具有多階段的決策
2.每個階段對應乙個狀態(狀態變數)
3.每個階段有乙個決策(不同的決策導致下乙個階段不同的狀態)
4.每個階段的最優解可以遞迴地歸結為下乙個階段各個可能狀態的最優解問題
(三)、一般的解題步驟
1.判斷問題是否具最優子結構性質者
2.分階段
3.建立狀態轉移方程(遞迴公式)
4.找出邊界條件
5.將已知的邊界值帶入方程
6.遞迴求解
(四)、揹包問題
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
5、區間dp
區間動態一般都是將乙個區間問題不斷劃分為更小的區間甚至乙個元素組成的區間,列舉他們的組合,求合併後的最優值。
區間動態規劃的模板**:
for(int p=1;p<=n;p++);
dp[i][j]=max}
二、感悟
老師剛開始上課就說,這部分題簡單的很簡單,難得很難,確實體會到了。剛開始做的那幾個題,太簡單了,**分分鐘寫出來ac,但是做到後邊。。。
有些題目動態規劃和貪心演算法都能解決,但是不同的是,動態規劃的下一步狀態與前一步密切相關。最難的地方就是狀態轉移方程,剛開始做直接暈了,非常不理解,後來做的多了,慢慢的就有點懂了,但是主要還是靠套公式,感覺還是沒有真正理解。
這個專題老師延長了很長時間,但還是沒有做完題目,而且最後幾篇部落格都是剛補的,還是應該做乙個題寫一篇部落格,否則時間長了思路都忘了。下個專題得改掉這個不好的習慣。
動態規劃總結
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 12 7 近期學了幾個動態規劃正好總結一下。裡面不涉及具體問題的具體解法,有問題可以參看我的具體型別的講解部落格。目前所見動態規劃可以劃分為兩類 鏈式和樹形。而且這兩類中的每個節點都是乙個完整的狀態集合。一 鏈式動態規劃 鏈式動態規劃的題...
動態規劃 總結
動態規劃是解決多階段決策問題的一種方法。如果一類問題的求解過程可以分為若干個互相聯絡的階段,在每乙個階段都需作出決策,並影響到下乙個階段的決策,從而確定了乙個過程的活動路線,則稱它為多階段決策問題。思想 在做每一步決策時,列出各種可能的區域性,解依據某種判定條件,捨棄那些肯定不能得到最優解的區域性解...
動態規劃總結
動態規劃是一種解決最優化問題的方法,動態規劃最大的特點是變化多端,解題方法不是按照一定套路來的。動態規劃一般是能分階段的問題,可以把大問題轉化為小問題,充分利用計算機重複處理問題的特點,把這個問題解決掉。並且動態規劃中的變數都是有一定含義的,每個變數都有它所包含的意思,比如 在最長上公升子串行這個題...