LintCode 114. 不同的路径
这是一道计数型动态规划的典型题目。写状态方程时要遵循不重复,不遗漏
,然后将这些不同方案加起来构成状态转移方程。
代码:
class Solution {
public:
/**
* @param m: positive integer (1 <= m <= 100)
* @param n: positive integer (1 <= n <= 100)
* @return: An integer
*/
int uniquePaths(int m, int n) {
if (0 == m && 0 == n) return 0;//题中未给数据范围,考虑特殊情况
//初始化
int f[m][n];//f[i][j]代表到达[i, j]位置的不同路径条数
memset(f, 0, sizeof f);
f[0][0] = 1;//初始值
//边界情况
for (int i = 1; i < m; ++i)
f[i][0] = f[i - 1][0];//第一列
for (int j = 1; j < n; ++j)
f[0][j] = f[0][j - 1];//第一行
//状态转移, 计算顺序从左到右,从上到下
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
f[i][j] = f[i - 1][j] + f[i][j - 1];
}
}
return f[m - 1][n - 1];
}
};