P1958 上学路线 题解

题目传送门

题意简述

一张地图,只能往上往右走,其中有 \(n\) 个障碍不能走上去,问从 \((1,1)\) 走到 \((a,b)\) 有几种方案。

分析

首先,我们将棋盘倒置方便处理,也就是说只能往下往右走。

动态规划。设 \(f_{i,j}\) 表示从 \((1,1)\) 走到 \(f_{i,j}\) 的路径条数,显然

\[f_{i,j}=\begin{cases}1,&i=1\&j=1,\\0,&trap,\\f_{i-1,j}+f_{i,j-1},&otherwise.\end{cases} \]

代码

#include <bits/stdc++.h>
using namespace std;

int f[45][45], a, b;
int n;
int main() {
    cin >> a >> b >> n;
    for (int i = 1, x, y; i <= n; i++) {
        cin >> x >> y;
        f[x][y] = -1;
    }
    f[1][1] = 1;
    for (int i = 1; i <= a; i++) {
        for (int j = 1; j <= b; j++) {
            if (f[i][j] != -1) {
                if (f[i - 1][j] != -1)f[i][j] += f[i - 1][j];
                if (f[i][j - 1] != -1)f[i][j] += f[i][j - 1];
            }
        }
    }
    cout << f[a][b];
    return 0;
}
posted @ 2022-01-02 18:04  tmjyh09  阅读(83)  评论(0编辑  收藏  举报