動態規劃 不同路徑

2021-10-11 18:43:06 字數 1635 閱讀 2106

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為 「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為 「finish」 )。

問總共有多少條不同的路徑?

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-yrgqqaoc-1607527338626)(

示例 1:

輸入:m = 3, n = 7

輸出:28

示例 2:

輸入:m = 3, n = 2

輸出:3

解釋

從左上角開始,總共有 3 條路徑可以到達右下角。

向右 -> 向右 -> 向下

向右 -> 向下 -> 向右

向下 -> 向右 -> 向右

示例 3:

輸入:m = 7, n = 3

輸出:28

示例 4:

輸入:m = 3, n = 3

輸出:6

1 <= m, n <= 100

題目資料保證答案小於等於 2 * 109

分析從起點到終點,有很多條路徑,那麼怎樣才能找到所有路徑呢?

首先我們可以用最笨的方法,即將每種可能都嘗試一遍,利用回溯+儲存狀態資訊,但是這樣做實在是太麻煩了,而且說不定很慢,那麼該怎樣做呢?

由於限制了只能右行或者下行,不存在先左再右回到原地這種毫無意義的操作,通過分析我們可以看到這個路徑具有兩個特點:

從第二點可以看出,到達某一點的路線條數等於到達它上面的點和到達它左邊的點路線條數之和

即公式

num[x,y] = num[x-1,y] + num[x,y-1]

再加上x==1和y==1的情況都只有一條路線,我們已經可以利用動態規劃的思想來完成這個任務了!

/*

執行結果:通過

執行用時:0 ms, 在所有 c++ 提交中擊敗了100.00%的使用者

記憶體消耗:6.3 mb, 在所有 c++ 提交中擊敗了62.24%的使用者

*/int dp[

101]

[101];

intuniquepaths

(int m,

int n)

for(

int i =

0; i < m;

++i)

for(

int i =

1; i < n;

++i)

}for

(int i =

0; i < n;

++i)

cout << endl;

}return dp[n -1]

[m -1]

;}

動態規劃 不同路徑(I,II

不同路徑 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?說明 m 和 n 的值均不超過 10...

62 不同路徑 動態規劃

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?本質上就是乙個 楊輝三角。這是個楊輝三角形,每個位置的路徑 該位置左邊的路徑 該位置上邊的路徑 動態...

leetcode 不同路徑 動態規劃

乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?示例 1 輸入 m 3,n 2 輸出 3 解釋...