部落格園markdons編輯器外掛--實時預覽、自動翻頁、數學公式
阿新 • • 發佈:2020-12-27
動態規劃 \(O(n)\)
設定f[i,j]
為從起點到店[i,j]
的路徑數量,由於機器人只會向下或者向右,所以狀態轉移關係式很容易求得
時間複雜度
\(O(n^2)\)
空間複雜度
\(O(n^2)\)
C++ 程式碼
class Solution { public: int uniquePaths(int m, int n) { if (!n || !m) return 1; int f[m + 1][n + 1]; memset(f, 0, sizeof f); f[1][1] = 1; for (int i = 1; i <= m; i ++) { for (int j = 1; j <= n; j ++) { if (i == 1 && j == 1) continue; f[i][j] = f[i-1][j] + f[i][j-1]; } } return f[m][n]; } };
做一下狀態壓縮
class Solution { public: int uniquePaths(int m, int n) { if (!n || !m) return 1; int f[n + 1]; memset(f, 0, sizeof f); f[1] = 1; for (int i = 1; i <= m; i ++) { for (int j = 2; j <= n; j ++) { f[j] = f[j] + f[j-1]; } } return f[n]; } };
組合數
機器人到終點一定會走\(m+n-2\)步,其中向右走多少步的可能有\(m-1\)種。所以我們得到
\[C_{m+n-2}^{m-1} \]程式碼略