https://leetcode.com/problems/unique-paths/
记忆化搜索的本质就是dp, 但是涉及图的时候 有时候思考会更顺一些
const int SIZE = 101; class Solution { public: int uniquePaths(int m, int n) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) dp[i][j] = -1; } return dfs(0,0, m, n); } int dfs(int hang, int lie, int m, int n) { if(dp[hang][lie] >= 0 )return dp[hang][lie]; if(hang == m-1 && lie == n-1) return (dp[m-1][n-1]=1); int ret = 0; if(hang+1 < m) ret += dfs(hang+1,lie, m, n); if(lie+1 < n) ret += dfs(hang, lie+1, m, n); return (dp[hang][lie]=ret); } private : int dp[SIZE][SIZE]; };
const int SIZE = 101; class Solution { public: int uniquePaths(int m, int n) { for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(i == 0 && j == 0) dp[i][j] =1; else { dp[i][j] = 0; if(i-1 >=0) dp[i][j] += dp[i-1][j]; if(j-1>=0) dp[i][j] += dp[i][j-1]; } } return dp[m-1][n-1]; } private : int dp[SIZE][SIZE]; };
C(M-1,N-1)+C(M-1,N)=C(M,N)
也可以这样http://www.bubuko.com/infodetail-911131.html