专题——基础递推

汉诺塔问题

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<=n1f(k)f(nk+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
(n^2mnm^2)2=1
输入正整数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)一定满足方程,向后递推,直到最大就可以了。
posted @ 2016-02-28 11:35  KatarinaYuan  阅读(203)  评论(0编辑  收藏  举报