1 solutions

  • 0
    @ 2023-12-24 10:24:28

    难度: 绿

    算法: 数学,Catalan 数,高精度

    发现斜线上有 nn 个点,而一个矩形最多包含其中的一个,要放 nn 个矩形,于是每个矩形都包含一个这样的顶点。

    然后左下角的点也要被包括。于是包括左下角点的矩形就把整个图形分为了两部分。发现这两部分就相当于 nn 更小的时候的情况。考虑 dpdp。记 dpidp_i 为放置 nn 个矩形时的答案。那么有:

    dp0=dp1=1,dpk=i=0k1dpidp_0=dp_1=1,dp_k=\sum_{i=0}^{k-1} dp_i

    这不就是卡特兰数吗?

    利用卡特兰数通项公式可以得到:

    dpk=(2k)!k!(k+1)!dp_k=\frac{(2k)!}{k!(k+1)!}

    代码:(懒得写高精度了)

    n=int(input());
    a=1;
    for i in range(2*n):
        a=a*(i+1);
    for i in range(n+1):
        a=a//(i+1);
    for i in range(n):
        a=a//(i+1);
    print(a);
    
    • 1

    Information

    ID
    242
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    10
    Tags
    # Submissions
    4
    Accepted
    2
    Uploaded By