专题——基础递推
汉诺塔问题
Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图所示。
要求把a柱上n个圆盘按下述规则移到c柱上:
(1)一次只能移一个圆盘;
(2)圆盘只能在三个柱上存放;
(3)在移动过程中,不允许大盘压小盘。
问将这n个盘子从a柱移动到c柱上,总计需要移动多少次盘子?
- 直接想不好想。先假设移动直径为1~n-1的原盘到C,再移动直径为n的原盘到B上,再将直径为1~n-1的原盘移动到B上。
- f(n)=2*f(n-1)+1
Fibonacci数列
一.兔子繁殖
如果一对兔子每月能生一对小兔(一雄一雌),而每对小兔在它出生后的一个月成熟,出生后两个月,能开始生一对小兔,之后每月生一对小兔,假定在不发生死亡的情况下,由一对出生的小兔开始,50个月后会有多少对兔子?
- f(n)为第n月的所有兔子数=第n月成熟的兔子+第n月初生的兔子
- 第n月成熟的兔子 = f(n-1) ,因为过一个月就可以成熟
- 第n月初生的兔子 = 第n-1月成熟的兔子 = 第n-2月的兔子总和,即f(n-2)
- f(n)=f(n-1)+f(n-2)
二.完美覆盖
有2×n的一个长方形棋盘,用一些1×2的骨牌铺满方格.例如n=3时,在2×3的棋盘上用1×2的骨片覆盖,共有3种铺法。试对给出的任意一个n(n>0),输出铺法总数.
- 1 .f(n)=第一列一个竖放+前两列两个横放=f(n-1)+f(n-2)
- 2 .规定第i列为第一个竖放的位置,
- n为奇数,f(n)=f(n-1)+f(n-3)+f(n-5)+…+f(0)
- n为偶数,f(n)=f(n-1)+f(n-3)+f(n-5)+…+f(1) +1(加上没有竖放的情况)
Calatan数 f(n+1)=f(n)*(4*n-6)/n
一.凸多边形的三角形剖分
在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形剖分成了若干个三角形,输入凸多边形的边数n,求不同剖分的方案数C(n)。例如当n=5时,有5种不同的方案.
- 边(1,n)终究会包含在一个三角形中,枚举三角形(1,n,k),
f(n)=∑2<=k<=n−1f(k)∗f(n−k+1)
f(2)是一条线段
危险的组合
在一个长度为n的字符串中,只包含L和U,如果3个U连续出现就非法,求给定长度n的非法串的数量。
- 非法=总共-合法
- 从第i个位置开始有三个连续的U,强制规定i-1不能放U,[1,i-2]是不能出现3个连续U的方案数=[1,i-2]总共的-[1,i-2]合法的。
第二类Stirling数
n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案数用S(n,m)表示,称为第二类Stirling数。
- 对于球i,要么单独放一个盒子,要么等其他的球放完了之后,随便找个位置和其他球一起放。
- f(n,m)=f(n-1,m-1)+f(n-1,m)*m
极值问题
已知m、n为整数,且满足下列两个条件:
1<= m, n <= k
输入正整数k ,(1<=k<=10^9),求一组满足上述两个条件的m,n ,并且使m2+n2的值最大。
- (n^2-mn-m^2)^2=(m^2+nm-n^2)^2
=[(n+m)^2-n(n+m)-n^2]^2
其中:n’=m+n,m’=n。 - 可知,(1,1)一定满足方程,向后递推,直到最大就可以了。