题目考察的知识点:动态规划
题目解答方法的文字分析:从起点到必经点的路径,再从必经点到终点的路径;创建一个dp表,然后初始化,找到2的位置,在2的位置继续初始化,然后再寻找路径,到终点即可。
本题解析所用的编程语言:c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cows int整型vector<vector<>>
* @return int整型
*/
int uniquePathsWithCows(vector<vector<int> >& cows) {
// write code here
int m = cows.size(), n = cows[0].size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
//第一次初始化
dp[0][1] = 1;
int i = 0, j = 0;
for (i = 1; i <= m; ++i)
{
for (j = 1; j <= n; ++j)
{
if (cows[i - 1][j - 1] == 2)
break;
if (cows[i - 1][j - 1] != 1)
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
if (j <= n && cows[i - 1][j - 1] == 2)
break;
}
//第二次初始化
int tmp = dp[i - 1][j];
for (int k = j - 1; k <= n; ++k)
dp[i - 1][k] = 0;
dp[i - 1][j] = tmp;
for (int a = i; a <= m; ++a)
{
for (int b = j; b <= n; ++b)
{
if (cows[a - 1][b - 1] != 1)
dp[a][b] = dp[a - 1][b] + dp[a][b - 1];
}
}
return dp[m][n];
}
};

京公网安备 11010502036488号