组合数学学习笔记

本文探讨了错位排序的计数方法,利用动态规划解决错位排列问题,并介绍了第一类和第二类斯特林数的计算公式及应用场景,同时解析了卡特兰数的由来及其在路径问题中的应用。

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

错位排序

n个物品,每个物品都不在对应的位置上,即对于任意的i∈[1,n],均有第i个物品不在i位置上的方案数。

dp[i]dp[i]dp[i]表示前i个物品的错排方案数,递推解决问题。

对于第n个物品,我们假设dp[1]−dp[n−1]dp[1]-dp[n-1]dp[1]dp[n1]都已经处理好了,那么这个物品会有两种情况:
1.前n-1个物品已经错排好了,那么这个物品只用和前面任意一个物品交换位置即可,即dp[n]=(n−1)∗dp[n−1]dp[n]=(n-1)*dp[n-1]dp[n]=(n1)dp[n1]
2.前n-1个物体有一个在自己的位置上,剩下n-2个物品错排好了,那就只能把第n个物品和那个在自己位置上的物品交换,即dp[n]=(n−1)∗dp[n−2]dp[n]=(n-1)*dp[n-2]dp[n]=(n1)dp[n2]
所以综上,dp[n]=(n−1)∗(dp[n−1]+dp[n−2])dp[n]=(n-1)*(dp[n-1]+dp[n-2])dp[n]=(n1)(dp[n1]+dp[n2])

特殊数列

第一类斯特林数:

​ n个物体排成k个非空环的方案数
​ 令所求的为dp[n][k]dp[n][k]dp[n][k],前面的都已经求好了。
​ 那么有两种情况:
​ 1.自己成一个环,那么之前有k-1个环:dp[n][k]=dp[n−1][k−1]dp[n][k]=dp[n-1][k-1]dp[n][k]=dp[n1][k1]
​ 2.前面已经有k个环,只需要把这个物体加到前面的空位里面,因为前面有n-1个物体,所以有n-1个空位,
​ 所以dp[n][k]=dp[n−1][k]∗(n−1)dp[n][k]=dp[n-1][k]*(n-1)dp[n][k]=dp[n1][k](n1)
​ 综合来看,dp[n][k]=(n−1)∗dp[n−1][k]+dp[n−1][k−1]dp[n][k]=(n-1)*dp[n-1][k]+dp[n-1][k-1]dp[n][k]=(n1)dp[n1][k]+dp[n1][k1]

第二类斯特林数

​ 将n个不同物体放在k个集合中的方案数
dp[n][k]dp[n][k]dp[n][k]为状态,同上,dp[i][j]=do[i−1][j−1]+dp[i−1][j]∗jdp[i][j]=do[i-1][j-1]+dp[i-1][j]*jdp[i][j]=do[i1][j1]+dp[i1][j]j

卡特兰数及其应用

何为卡特兰数

引入例题:

​ 如图,在一个4*4的网格中,我们从左下角走到右上角且不越过对角线的方案数是多少?

img

在这里插入图片描述
分析:我们不妨计算出总方案数,减去越过对角线的非法方案数
​ 总方案数:c(2n,n)c(2n,n)c(2n,n)

下面我们来分析非法方案数:如上图,一条非法路线一定经过对角线上面某一个点,假设它第一次越过对角线的时候的那个点为x点(即上图的蓝红绿三线交点),做出绿线,然后将红线沿着绿线对称,得到的蓝线不妨看作是从(0,0)(0,0)(0,0)(n−1,n+1)(n-1,n+1)n1,n+1)的一个方案数,而且对于每一个非法的路径,均有一条蓝线与之对应,所以,不合法方案数为c(2∗n,n−1)c(2*n,n-1)c(2n,n1)

所以说,卡特兰数的公式为f(n)=c(2∗n,n)−c(2∗n,n−1)f(n)=c(2*n,n)-c(2*n,n-1)f(n)=c(2n,n)c(2n,n1)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值