您将获得一个包含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 所有坐标都有效且不同。
答案 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.