网格
BZOJ3907 网格
某城市的街道呈网格状,左下角坐标为 A(0,0)A(0,0),右上角坐标为 B(n,m)B(n,m),其中 n≥mn≥m。现在从 A(0,0)A(0,0) 点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左上方的点,即任何途径的点 (x,y)(x,y) 都要满足 x≥yx≥y,请问在这些前提下,到达 B(n,m)B(n,m) 有多少种走法。
解析:卡特兰数。(1,2,5,14,42,132......)当卡特兰数不明显时,可通过打表找规律
典型例子:
从(0,0)走到(n,n)且不经过直线y=x的路线数量
另右移为0,上移为1,则问题转化为由n个0和n个1排成的,任意前缀中0都不少于1的序列数量(卡特兰数)
所以总方案数为Catn*2
从(0,0)走到(n,n)且不接触直线y=x的路线数量
用卡特兰数很容易解决:(第一步也可以走到(1,0),我们只需算出一种,另一种*2即可)第一步肯定到了(0,1),且最后一步肯定到了(n,n-1),故总方案数为Catn-1(乘2)
我们也可以利用对称的思想解决这两个问题(这个思想也是解决本题的关键所在):
从(0,0)走到(n,n)且不接触直线y=x的路线数量
从(1,0)走到(n,n-1),如果不考虑接触直线的问题,那么总方案数为C(n-1,2n-2),(1,0)关于直线y=x的对称点为(0,1)
从(0,1)走到(n,n-1)一定会经过直线y=x,这于从(1,0)经过y=x再走到(n,n-1)的路径数是相等的,所以满足题意的方案数为(C(n-1,2n-2)-C(n,2n-2))(Catn-1)(乘2)
从(0,0)走到(n,n)且不经过直线y=x的路线数量
这个问题等价于不接触直线y=x+1,所以过(0,0)作关于直线y=x+1的对称点(-1,1),从(-1, 1)到点(n, n)必定接触y=x+1,方法数为C(2n - 1, 2n),所以符合要求的方法数为:C(n, 2n) - C(2n - 1,2n) = C(n, 2n) - C(2n + 1,2n) = Cat(n)(乘2)
接下来终于到了这道题的解法:
过(0,0)作关于直线y=x+1的对称点(-1,1),过(0,0)且接触直线y=x+1的方案数等于从(-1,1)的方案数
C(n+1,n+m),从(0,0)到(n,m)的总方案数为C(n,n+m),所以答案的方案数为C(n,n+m)-C(n+1,n+m)
(也可用对称矩形的方法来解决此题,而且正确性更易证明)
因为不会写高精,所以没有代码