题目描述
思路分析
(1)确定状态
最后一步:
子问题:
(2)转移方程
(3)初始条件和边界情况
(4)计算顺序
C++实现
class Solution {
public:
// 使用动态规划解题,能够到达每个格子,只能是从他的上方或者左侧到达
int uniquePaths(int m, int n) {
// 建立dp
// vector<vector<int>>dp(m, vector<int>(n, 0));
int[][] dp = new int[m][n]; //只用到0、1、2……m-1,故数组开m,不是m+1
for(int i=0; i<m; ++i){
for(int j=0; j<n; ++j)
if (i == 0 || j == 0) //初始化
dp[i][j] = 1;
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
return dp[m-1][n-1];
delete[][] dp;
}
};
//单独初始化
// dp[0][0] = 1;
// for(int j=0; j<n; ++j) // 填充第一行(边界)
// dp[0][j] = 1;
// for(int i=0; i<m; ++i) // 填充第一列(边界)
// dp[i][0] = 1;