查找具有特定限制的网格中的路径数

时间:2015-09-21 14:54:36

标签: algorithm dynamic-programming

您将获得一个包含n行和m列的矩形网格。行从下到上编号为1到n,列从左到右编号为1到m。

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

您必须遵循一条规则。您只能进行直线向上或向右移动。换句话说,从每个字段(行,列),您只能移动到字段(行+ 1,列)或字段(行,列+ 1)。

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

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

输出: k + 1个空格分隔的整数,这个问题的答案。

约束: 1&lt; = n,m,k <= 100 对于所有坐标(r,c)-1 <&lt; = r&lt; = n,1&lt; = c&lt; = m 所有坐标都有效且不同。

1 个答案:

答案 0 :(得分:1)

这是一个简单的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.