參考:
動態規劃知識點:
動態規劃經典案例:
乙隻袋鼠要從河這邊跳到河對岸,河很寬,但是河中間打了很多樁子,每隔一公尺就有乙個,每個樁子上都有乙個彈簧,袋鼠跳到彈簧上就可以跳的更遠。每個彈簧力量不同,用乙個數字代表它的力量,如果彈簧力量為5,就代表袋鼠下一跳最多能夠跳5公尺,如果為0,就會陷進去無法繼續跳躍。河流一共n公尺寬,袋鼠初始位置就在第乙個彈簧上面,要跳到最後乙個彈簧之後就算過河了,給定每個彈簧的力量,求袋鼠最少需要多少跳能夠到達對岸。如果無法到達輸出-1
輸入分兩行,第一行是陣列長度n (1 ≤ n ≤ 10000),第二行是每一項的值,用空格分隔。
輸出最少的跳數,無法到達輸出-1
解答:拿到這道題我首先想到了dijkstra最短路徑,最短路徑本質上也是一種動態規劃問題。
所謂動態規劃,即將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的資訊。在規劃過程中涉及到求解區域性最優解以達到整體最優解問題。關鍵方法是從實際問題中抽象出動態規劃表dp,「其中行表示決策的階段,列表示問題狀態,**需要填寫的資料一般對應此問題的在某個階段某個狀態下的最優值(如最短路徑,最長公共子串行,最大價值等),填表的過程就是根據遞推關係,從1行1列開始,以行或者列優先的順序,依次填寫**,最後根據整個**的資料通過簡單的取捨或者運算求得問題的最優解:f(n,m)=max」
#include #include using namespace std;
int getcount(vector&temp)
}if(dp[n]==1000) return -1;
else return dp[n]-1;
}int main()
順便複習一下dijkstra演算法:
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...
動態規劃演算法
動態規劃演算法的思路 動態規劃法即 dynamic programming method dp 是系統分析中的種常用方法。動態規劃法是20世紀50年代由貝爾曼 r.bellman 等人提出的,用來解決多階段決策過程問題的一種最優化方法。多階段決策過程是指把研究問題分成若干個相互聯絡的階段,由每個階段...