题目

牛牛得到了一份寻宝图,根据寻宝图的指示,牛牛在一个 的网格中,牛牛的位置在 ,宝藏的位置在
由于寻宝需要按照特定规则,所以牛牛只能往上走或者往右走。
藏宝人为了让故意为难牛牛,在地图中设置了一块长方形的陷阱区域,陷阱左下坐标为 ,右上坐标为 ,牛牛要是碰到了陷阱可能会有生命危险。
牛牛能顺利找到宝藏有多少种不同的寻宝路径?

解题思路

动态规划

表示顺利到达位置 时的路径数目。
牛牛可以往上走或往右走,所以
当然前提是位置 不是位于陷阱区域。如果是的话,
最后,返回 作为答案。

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];
    }
};