OJ经典题目 卡特兰数

本文介绍了卡特兰数的概念及其两种递推公式,并展示了使用C++实现递推计算卡特兰数的过程。通过递推关系式,我们可以高效地求解不同项的卡特兰数值,这在组合数学和编程面试中是一道常见的题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。
原理如下:
设h(n)为catalan数的第n+1项,令h(0)=1,h(1)=1,catalan数满足递推式 [2] :
h(n)= h(0)*h(n-1)+h(1)h(n-2) + … + h(n-1)h(0) (n>=2)
例如:h(2)=h(0)h(1)+h(1)h(0)=11+11=2
h(3)=h(0)h(2)+h(1)h(1)+h(2)h(0)=12+11+21=5
另类递推式:
h(n)=h(n-1)
(4
n-2)/(n+1);
递推关系的解为:
h(n)=C(2n,n)/(n+1) (n=0,1,2,…)
递推关系的另类解为:
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)

这种递推关系经常用来出题做编程。

我的解法如下:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <cstring>
#define ll long long

ll dp<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值