在具有特定限制的情况下查找网格中的路径数

Find number of paths in grid with certain restrictions

给你一个 n 行 m 列的矩形网格。行从下到上编号为 1 到 n,列从左到右编号为 1 到 m。

你还得到了表格(行,列)中的k个特殊字段。对于每个 i,其中 0 <= i <= k,计算从 (1, 1) 到 (n, m) 恰好包含 n 个特殊字段的不同路径的数量。

有一条规则你必须遵守。您只能进行笔直向上或向右的移动。也就是说,从每个字段(行,列),只能移动到字段(行+1,列)或者字段(行,列+1)。

输出一个包含 k + 1 个元素的数组。第 i 个元素(从 0 开始)必须是恰好包含 i 个特殊字段的不同路径的数量。因为,答案可能太大,以 1000007 为模输出它。

输入: 第一行包含三个 space 分隔的整数,n、m 和 k。接下来k行,每行包含两个space分隔的整数,一个特殊字段的坐标。

输出: k + 1 space 分隔的整数,问题的答案。

约束条件: 1 <= n, m, k <= 100 对于所有坐标 (r, c) - 1 <= r <= n, 1 <= c <= m 所有坐标均有效且不同。

这是一个简单的DP:

初始化:

T[i][0][k] = 0
T[0][j][k] = 0

如果grid[1][1]不特殊:

T[1][1][k!=0] = 0
T[1][1][0] = 1

否则:

T[1][1][k!=1] = 0
T[1][1][1] = 1

批量:

如果grid[i][j]不是特别的:

T[i][j][k] = (T[i-1][j][k] + T[i][j-1][k]) % 1000007

否则:

T[i][j][0] = 0
T[i][j][k>0] = (T[i-1][j][k-1] + T[i][j-1][k-1]) % 1000007

答案:

T[n][m][k], for every possible k.