動態規劃問題其實我理解其實他就是遞迴問題,跟遞迴問題幾乎沒啥兩樣,最能使我理解動態規劃問題的就是網上的動態規劃——下樓梯問題,作者真的很優秀,他的方法感覺很通俗易懂,真的使我受益匪淺,下面我也希望我對動態規劃的講解能幫助到大家
遞迴:1,把問題轉化為規模縮小了的同類問題的子問題
2,有明確的不需要繼續進行遞迴的條件(base case)
3,有當得到了子問題的結果之後的決策過程
4,不記錄每乙個子問題的解
動態規劃:
1,從暴力遞迴中來
2,將每乙個子問題的解記錄下來,避免重複計算
3,把暴力遞迴的過程,抽象成了狀態表達
4,並且存在化簡狀態表達,使其更加簡潔的可能
下樓梯問題:
下樓梯每次只能走一階或則兩階,如果正向理解就很難想,只能暴力破解法,所以逆向知道想要到達n階只有從n-1階和n-2兩種方法,當上到n-1階有x種方法,上到n-2有y種方法時,知道最終上到n階總共有f(n-1)+f(n-2)=x+y種方法
所以根據遞迴知道,**為下:
#include "stdafx.h"
#include "iostream"
using namespace std;
int guihua_shanglouti(int n,int a)//動態規劃上樓梯問題,引數中之所以會多了乙個陣列的引數,是因為要建立乙個「備忘錄」,讓函式中已經算過的值能夠不用重複運算。。
if (n == 1)//上到第一階有1種方法
if (n == 2)//上到第二階有2種方法
else
else if(a[n - 2]==null&&a[n - 1]!=null)
else
}return a[n];
}}
int main()
{ int step,a[20];
cout<<"你想求解上幾層台階的,辦法總數:";
cin>>step;
cout<<"你設定的台階,走到最後總共有"《如果想練習動態規劃問題不如去試試以下幾種問題:
硬幣問題,揹包問題。
大神的動畫理解-動態規劃
動態規劃之0 1揹包問題(簡單易懂)
問題描述 現給定n種物品以及一容量為c的揹包,物品具有質量和價值兩個屬性,物品i的質量為wi,價值為vi。問如何選擇裝入揹包的物品,才能使得揹包中物品的總價值最大?問題分析 給定資料為揹包容量c 10,物品種類n 5,物品質量w n 物品價值v n 要解決這個問題,只需要以某種形式填寫下方這張表即可...
簡單易懂動態規劃演算法
什麼是動態規劃 把原問題分解成若干個相對簡單的子問題,然後逐步解決子問題從而解決複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。基本思想 若要解出乙個相對複雜的問題,我們需要解出其子問題,再合併子問題從而得到原問題的解。問題特徵 最優子結構 當原問題最優解包含了其子問題的最優解...
動態規劃簡介
1.定義 動態規劃 dynamic programming 是運籌學的乙個分支,是求解決策過程 decision process 最優化的數學方法。20世紀50年代初美國數學r.e.bellman等人在研究多階段決策過程 multistep decision process 的優化問題時,提出了著名...