[学习笔记]递推问题选讲
Hanoi塔问题
要将a上所有圆盘移到c,并且过程中不能出现大的圆盘在小的圆盘上面的情况.
- 把除了最大的之外的圆盘从a移到b.
f[n-1]
- 把最大的从a移到c.
1
- 把除了最大的之外的圆盘从b移到c.
f[n-1]
通式:\(f[n]=f[n-1]\times2+1\)
Catalan数
求用对角线将n边形划分成(n-2)个三角形的不同的方案数.
- 因为n边形每条边都必在一个三角形中,所以任取一条边为底,枚举顶点,将n边形分成两个多边形(k边形 和 n-k+1边形),个数为
f[k]×f[n-k+1]
,然后将所有情况相加即可.
通式:\(f[n]=\sum_{i=2}^{n-1}f[i]\times f[n-i+1]\).
第二类Stirling数
n个不同的球,放入m个无区别的盒子,不允许盒子为空。
- 第n个球单独放一个盒子,共有m个盒子
f(n-1,m-1)
- 第n个球和其他球放一起,共有m个盒子
f(n-1,m)×m
通式:\(S(n,m)=S(n-1,m-1)+S(n-1,m)\times m\)
扩展
n个不同的球,放入m个有区别的盒子,不允许盒子为空。
此时箱子顺序便与方案数有关,\(f(n,m)=P_m^m\times S(n,m)\)
\(\\\)
n个不同的球,放入m个无区别的盒子,允许盒子为空。
枚举非空盒子数,\(f(n,m)=\sum_{i=0}^m S(n,m)\)
\(\\\)
n个不同的球,放入m个有区别的盒子,允许盒子为空。
结合上面两种情况,\(f(n,m)=\sum_{i=0}^m p_m^i\times S(n,m)\)
\(\\\)
n个相同的球,放入m个有区别的盒子,不允许盒子为空。
隔板法:m个盒子=(m-1)块版,n个球且盒子不为空=(n-1)个槽,每个槽最多放一块板,所以方案数为 \(C_{n-1}^{m-1}\).
\(\\\)
n个相同的球,放入m个有区别的盒子,允许盒子为空。
可以假设m个盒子中原来各有一个球,现在需要再放入n个球,问题就转化成了上一种情况:m个盒子=(m-1)块版,(n+m)个球且盒子不为空=(n+m-1)个槽,每个槽最多放一块板,所以方案数为 \(C_{n-1}^{n+m-1}\).
\(\\\)
n个相同的球,放入m个无区别的盒子,允许盒子为空。
\(f[i][j]\)表示n个球,m个盒子的方案数.
因为盒子相同,为避免计重,给每个盒子编号,假设每个盒子里的小球数不上升.
所以可将加球操作分为两种:
- 新添一个盒子
- 往所有盒子里放入一个球
即 \(f[n][m]=\begin{cases}f[n][m-1]+f[n-m][m]&n\geq m\\f[n][m-1]&n<m\end{cases}\)
\(\\\)
n个相同的球,放入m个无区别的盒子,不允许盒子为空。
假设每个盒子里的小球数不上升.
因为不允许盒子为空,所以可往每个盒子中先放入一个球,问题就转化成了上一种情况:(n-m)个相同的球,放入m个无区别的盒子,允许盒子为空.
2017-06-28 21:22:55