网格

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)

(也可用对称矩形的方法来解决此题,而且正确性更易证明)

因为不会写高精,所以没有代码

转载于:https://www.cnblogs.com/Akaina/p/11243681.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值