動態規劃(一)入門例子

2021-08-03 17:45:16 字數 747 閱讀 7739

有乙個xxy的網格,乙個機械人只能走格點且只能向右或向下走,要從左上角走到右下角。請設計乙個演算法,計算機械人有多少種走法。

給定兩個正整數int x,int y,請返回機械人的走法數目。保證x+y小於等於12。

測試樣例:

2,2

返回:2

解析一:只是利用簡單的遞迴做的話,比較簡單,就是重複計算的太多

public

static

intcountways(int x, int y)

解析二:使用動態規劃做,需要乙個二維陣列記錄每個方格的步數情況。以3x3為例(即x=3,y=3),初始化資料的時候,(0,0)的點的值為0,第一行以及第一列均設為1。其他方格的資料一定來自於它的上側以及它的左側的資料之和,示意圖見下圖。

//dp解法的機械人走方格

public

static

intcountways(int x, int y)

for(int j=1;j//第一列的初始化

dp[j][0]=1;

}for(int i=1;ifor(int j=1;j1][y]+dp[i][j-1];}}

return dp[x-1][y-1]; //右下角的步數

}

動態規劃 一

在現實生活中,有一類活動的過程,由於它的特殊性,可將過程分程若干個互相聯絡的階段,在它的每一階段都需要作出決策,從而使整個過程達到最好的活動效果。當然,各個階段決策的選取不是任意確定的,它依賴於當前面臨的狀態,又印象以後的發展,當各個階段決策確定後,就組成乙個決策序列,因而也就確定了整個過程的一條活...

動態規劃(一)

動態規劃的兩種常用形式 1 遞迴型 在函式中呼叫自身 優點 直觀,容易編寫 缺點 可能會因為遞迴層數太深導致爆棧,函式呼叫帶來額外時間開銷。無法使用滾動陣列節省空間。總體來說,比遞推型慢。2 遞推型 for迴圈 效率高,有可能使用滾動陣列節省空間。有的問題只能用遞迴解決,有的問題既可以用遞迴,也可以...

動態規劃 (一)

對於動態規劃的學習總共進行了兩節課,到現在為止還是一頭霧水,雖然看懂了老師上課講的例題,但是做v judge的時候還是都不太會,我主要認為我只知道了動態規劃的基本思想,就是將乙個大的問題,分成若干個小問題,但與貪心演算法不同的是,動態規劃中的每乙個小問題之間都相互影響,在每一步都取得最優解,且在不斷...