動態規劃問題簡介 簡單易懂

2021-08-28 15:07:00 字數 1182 閱讀 2995

動態規劃問題其實我理解其實他就是遞迴問題,跟遞迴問題幾乎沒啥兩樣,最能使我理解動態規劃問題的就是網上的動態規劃——下樓梯問題,作者真的很優秀,他的方法感覺很通俗易懂,真的使我受益匪淺,下面我也希望我對動態規劃的講解能幫助到大家

遞迴:1,把問題轉化為規模縮小了的同類問題的子問題

2,有明確的不需要繼續進行遞迴的條件(base case)

3,有當得到了子問題的結果之後的決策過程

4,不記錄每乙個子問題的解

動態規劃:

1,從暴力遞迴中來

2,將每乙個子問題的解記錄下來,避免重複計算

3,把暴力遞迴的過程,抽象成了狀態表達

4,並且存在化簡狀態表達,使其更加簡潔的可能

下樓梯問題:

下樓梯每次只能走一階或則兩階,如果正向理解就很難想,只能暴力破解法,所以逆向知道想要到達n階只有從n-1階和n-2兩種方法,當上到n-1階有x種方法,上到n-2y種方法時,知道最終上到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 的優化問題時,提出了著名...