闲来无事,把几个递推公式做了一下总结。
斐波那契
这个应该是大家比较熟悉的递推公式了吧,比如问你有2行n列的长方形方格,要求用n个1*2的骨牌铺满。有多少种铺法?,那么这题我们可以想到可以通过n-1时以及n-2时转移过来,于是答案即为斐波那契数列的第n项。
递推公式:
f[i]=f[i−1]+f[i−2]
组合数
对于求解n个数中选择m个有多少种方案,我们可以想到使用组合数求解,而对于中等数据范围,多次查询的题目我们可以使用递推组合数的方法求解,所得的即为杨辉三角表。
原公式:
C(n,m)=n!m!(n−m)!
递推公式:
C[i][j]=C[i−1][j−1]+C[i−1][j]
错排公式
十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?
这种问题即为错排问题,设
D[i]
为有i个物品的方案数,于是我们考虑使用递推法求解。
第一步,把第
n
个元素放在一个位置,比如位置
第二步,放编号为
k
的元素,这时有两种情况:
⑴把它放到位置
⑵第
k
个元素不把它放到位置
最终,我们得到了一个公式:
D[i]=(i−1)∗(D[i−1]+D[i−2])
此即为错排公式
卡特兰数
矩阵连乘:
P=A1×A2×A3×……×An
,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?
合法的括号序列,排队买票,凸包的划分三角形问题都可以使用卡特兰数解决,我们设合法的解决方案数为
h(n)
,于是我们能推出一个很暴的函数啊
h(n)=h(0)∗h(n−1)+h(1)∗h(n−2)+...+h(n−1)∗h(0)
,先别着急啊,这只是最基本的公式,还有更暴的递推式:
h(n)=h(n−1)∗(4∗n−2)
对于这个东西如何做到非递推求解呢?
我们有两个等价的式子
h(n)=C(2n,n)n+1
h(n)=C(2n,n)−C(2n,n−1)
于是我们可以借助之前提到的组合数得到问题的答案啦。