洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数

【题目来源】
https://www.luogu.com.cn/problem/P8705

【题目描述】
把 1∼2020 放在 2×1010 的矩阵里。要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案?
答案很大,你只需要给出方案数除以 2020 的余数即可。

【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

【算法分析】
● 卡特兰数(Catalan number)是组合数学中一个常出现在各种计数问题中的数列。若从第 0 项开始,则卡特兰数列 hn 为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, ...。

● 常用的卡特兰数列 hn 有如下 4 种等价的递推式
hn=h0*hn−1+h1*hn−2+...+hn−1*h0, (n≥2, h0=h1=1)
hn=hn−1*(4*n−2)/(n+1), (n≥2)
hn=C(2n,n)−C(2n,n−1), (n=0,1,2,...)
hn=C(2n,n)/(n+1), (n=0,1,2,...)

● 卡特兰数的第 20 项为 6564120420,大于 2×10^9,所以代码中要声明为 long long 型。

● 矩阵填充与进栈出栈过程的对应关系以及和卡特兰数的联系
(1)第一行填充对应进栈:当我们从左到右填充矩阵的第一行时,每放入一个数字,就相当于一个元素进栈。因为第一行的数字是依次增大的,就好像元素依次进入栈中,且栈内元素是按照进栈顺序依次排列(从小到大)。
(2)第二行填充对应出栈:当我们开始填充矩阵的第二行时,由于要满足同一列下边的数字比上边大,所以放入第二行的数字必须是已经在第一行出现过的数字,这就类似于元素出栈。

(3)可以将进栈(push)操作看作在平面直角坐标系中向沿 x 轴正向走一步,出栈(pop)操作看作沿 y 轴正向走一步。要完成 n 个元素的进栈和出栈操作,最终需要从原点(0,0)走到点(n,n)。但由于合法的进栈出栈序列要求在任何时刻出栈次数不超过进栈次数,所以对应的路径不能穿过直线 y=x,只能在直线 y=x 及其下方行走。最终,可得合法的出栈序列数就是卡特兰数的第 n 项:hn=h0*hn−1+h1*hn−2+...+hn−1*h0, (n≥2, h0=h1=1)。

【算法代码】

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int maxn=2e5+5;
long long c[maxn];
int n;

int main() {
    cin>>n; //n=1010
    c[0]=1,c[1]=1;
    for(int i=2; i<=n; i++) {
        for(int j=0; j<=i-1; j++) {
            c[i]+=c[j]*c[i-j-1];
            c[i]%=2020;
        }
    }

    cout<<c[n];

    return 0;
}

/*
in:1010
out:1340
*/

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/145830268
https://blog.csdn.net/hnjzsyjyj/article/details/145842440
https://blog.csdn.net/hnjzsyjyj/article/details/129148916
https://www.acwing.com/file_system/file/content/whole/index/content/3766019/

相关推荐
郝学胜-神的一滴14 小时前
中级OpenGL教程 022:探秘三维世界的血脉传承——物体父子关系与矩阵递归奥义
c++·线性代数·unity·矩阵·游戏引擎·unreal engine·opengl
爱刷碗的苏泓舒2 天前
平方根信息滤波:矩阵推导及 GNSS 参数估计应用
线性代数·算法·矩阵·gnss·参数估计·测量平差·平方根信息滤波
智灵鸟科技2 天前
封闭网络怎么安全地接外部能力:三条通道穷举、威胁封堵矩阵与残余风险
网络·安全·矩阵
zandy10112 天前
企业级BI平台选型指南:评估框架与核心能力矩阵
大数据·人工智能·矩阵
棒球1号位3 天前
中国棒球联盟矩阵建设白皮书:解码本土化创新与国际接轨路径·棒球1号位
大数据·人工智能·矩阵
一个小猴子`3 天前
Triton实现矩阵乘法
矩阵·cuda·triton
noipp3 天前
推荐题目:洛谷 B2099 矩阵交换行
线性代数·算法·矩阵
ssl_xxy3 天前
行列式杂题第二弹
线性代数·矩阵
中微极客4 天前
2026年4月LLM排名矩阵:从SWE-Bench到终端性能的实战选型指南
矩阵
文祐6 天前
C语言利用数组计算矩阵乘法
c语言·开发语言·矩阵