题目
牛牛得到了一份寻宝图,根据寻宝图的指示,牛牛在一个 的网格中,牛牛的位置在
,宝藏的位置在
。
由于寻宝需要按照特定规则,所以牛牛只能往上走或者往右走。
藏宝人为了让故意为难牛牛,在地图中设置了一块长方形的陷阱区域,陷阱左下坐标为 ,右上坐标为
,牛牛要是碰到了陷阱可能会有生命危险。
牛牛能顺利找到宝藏有多少种不同的寻宝路径?
解题思路
动态规划
表示顺利到达位置
时的路径数目。
牛牛可以往上走或往右走,所以 。
当然前提是位置 不是位于陷阱区域。如果是的话,
。
最后,返回 作为答案。
C++代码
class Solution {
const int mod = 1e9+7;
public:
/**
*
* @param n int整型
* @param m int整型
* @param x0 int整型
* @param y0 int整型
* @param x1 int整型
* @param y1 int整型
* @return int整型
*/
int GetNumberOfPath(int n, int m, int x0, int y0, int x1, int y1) {
// write code here
vector<vector<int>> dp(n+1, vector<int>(m+1,0));
if(1>=x0 && 1<=x1 && 1>=y0 && 1<=y1)
return 0;
dp[1][1] = 1;
for(int i=1; i<=n; ++i){
for(int j=1; j<=m; ++j){
if(i>=x0 && i<=x1 && j>=y0 && j<=y1)
continue;
if(i>1)
dp[i][j] += dp[i-1][j];
if(j>1)
dp[i][j] += dp[i][j-1];
dp[i][j] %= mod;
}
}
return dp[n][m];
}
}; 
京公网安备 11010502036488号