您当前的位置: 首页 > 

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AcWing 889. 满足条件的01序列(卡特兰数)

MangataTS 发布时间:2022-02-15 21:11:16 ,浏览量:0

题目连接

https://www.acwing.com/problem/content/891/

思路

因为有n个1和n个0,那么最后一定能走到点(n,n),我们正面去想不太好想,所以我们可以看看中间出现1的数量比0多的情况,对于这个放法我们可以化成一个平面图,1表示向右走一步,0表示向上走一步,那么对于我们现在要求的反面就是要经过 y = x + 1 y=x+1 y=x+1这一条线的方案数,我们可以对这条线做(n,n)的一个对称图形也就是(n-1,n+1),我们会发现这个一个位置的方案数为: C 2 n n − 1 C_{2n}^{n-1} C2nn−1​,对于走到(n,n)的所有方案数为: C 2 n n C_{2n}^{n} C2nn​,那么我们直接做一个差就好啦,化简后就是: C 2 n n n + 1 \frac{C_{2n}^{n}}{n+1} n+1C2nn​​这个数也被称为卡特兰数

代码
#include
using namespace std;
#define ll long long
#define mod 1000000007

ll ksm(ll a,ll b){
    ll res = 1;
    for(;b;b>>=1,a=a*a%mod) if(b & 1) res = res * a % mod;
    return res;
}

ll C(ll a,ll b){
    b = min(a-b,b);
    ll ansL = 1,ansR = 1;
    for(int i = 1;i             
关注
打赏
1665836431
查看更多评论
0.0956s