蓝桥杯试题 D: 矩阵 卡特兰数
作者:
大瓜娃子
,
2022-01-26 21:31:30
,
所有人可见
,
阅读 245
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 200000;
LL a[N];
int n;
int main()
{
cin>>n;//n=1010
a[0]=1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<i;j++)
{
a[i]+=a[j]*a[i-1-j];
a[i]%=2020;
}
}
cout<<a[n];
return 0;
}
考虑把 1-2n 从小到大依次放进矩阵中,可以发现每次放置的位置只能是第一行的最左空位或第二行的最左空位
(否则左边一定会放一个更大的元素,而这不合法)。同时,如果放在第二行,
那么要保证它上方已经有数字(否则会放一个更大的进去,同样不合法)。
那么这样子可以把放在第一行看成 (,放在第二行看成 ),也就是计数长度为 2n的合法括号序列。根据卡特兰数,这个数量为
作者:pxlsdz
链接:https://www.jianshu.com/p/6f24c4d039c8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。