動態規劃,
是求解決策過程最優化的數學方法,是在處理問題過程中,把多階段過程轉化為一系列單階段問題,利用各階段之間的關係,逐個求解的一種方法,它沒有一種確切的解題步驟,它的解決思路是多種多樣的。
這套題裡邊遇到的dp問題主要有斐波那契數列、最長上公升子串行問題、還有就是兩種揹包的問題。
斐波那契數列:f(n)=f(n-1)+f(n-2),這個就是著名的斐波那契數列,然後這類問題是整套題做的最爽的一塊,因為主要的步驟在公式,一道題會了,整個就會了,非常簡單。
最長上公升子串行:就是在一段序列裡求出上公升是最長一段子串行,解題方式就是用乙個陣列儲存當前選出的最長序列,然後進行比較,如果在有更長的序列,那麼替換,否則繼續比較,最終輸出。這個問題是在前幾道是這類的題目,我印象深刻的是乙個猴子的。。卡了我好久,一直沒搞懂題意,最後搞懂了,也被搞的不想做了。。。
01揹包:公式:f[i, j] = max( f[i-1, j-wi] + pi (j >= wi), f[i-1, j] ),給定價值和體積,求在當前情況下可能得到的最大價值。這種型別所有的題目基本都離不開那個公式,很多解題方法最後也都歸結到公式。「將前i件物品放入容量為v的揹包中」這個子問題,若只考慮第i件物品的策略(放或不放),那麼就可以轉化為乙個只牽扯前i-1件物品的問題。如果不放第i件物品,那麼問題就轉化為「前i-1件物品放入容量為v的揹包中」,價值為f[v];如果放第i件物品,那麼問題就轉化為「前i-1件物品放入剩下的容量為v-c的揹包中」,此時能獲得的最大價值就是f[v-c]再加上通過放入第i件物品獲得的價值w。這就是01揹包問題的解題思路。
完全揹包:乙個複雜的01揹包問題,我是這麼理解的。。這個型別的題我只做了倆,乙個還是轉換為了01揹包去做。。它跟01揹包的差別就是在與取幾件的問題,其餘的解題差不多。
感想:dp的問題,說難很難,一整天沒思路,說簡單也非常簡單,斐波那契數列的問題一小時多點可以刷3道,這套題看的是思路。有思路簡單,沒思路很難,跟前兩套相比變化很大,很鍛鍊自己,乙個不錯的體驗。
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...
動態規劃演算法
動態規劃演算法的思路 動態規劃法即 dynamic programming method dp 是系統分析中的種常用方法。動態規劃法是20世紀50年代由貝爾曼 r.bellman 等人提出的,用來解決多階段決策過程問題的一種最優化方法。多階段決策過程是指把研究問題分成若干個相互聯絡的階段,由每個階段...