[学习笔记]递推问题选讲

Hanoi塔问题

要将a上所有圆盘移到c,并且过程中不能出现大的圆盘在小的圆盘上面的情况.

  1. 把除了最大的之外的圆盘从a移到b. f[n-1]
  2. 把最大的从a移到c. 1
  3. 把除了最大的之外的圆盘从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个无区别的盒子,不允许盒子为空。

  1. 第n个球单独放一个盒子,共有m个盒子 f(n-1,m-1)
  2. 第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

posted @ 2021-11-25 14:23  Aireen_Ye  阅读(18)  评论(0编辑  收藏  举报
底部 顶部 留言板 归档 标签
Der Erfolg kommt nicht zu dir, du musst auf den Erfolg zugehen.