基本步骤
- 确认能否容易地得到初始状态的解
- 假设不大于N-1的状态已经得到解决
- ✭当规模扩大到N时,想办法枚举到所有可能的情况,然后用子问题的状态(F(1)、F(2) ...F(N-1))表示出最终的状态F(N)
经典例题
直线分割平面问题
解:假设之前已经有n-1条直线,并且已经分割了f(n-1)个区域,第n次分割就是在原先的基础上再分割一次。对于这一条直线,它与之前的直线毫无疑问有n-1个交点,这些交点把这第n条直线分为了n段,每一段就代表增加了一个新的区域。
状态转移方程:f(n) = f(n-1) + n
折线分割平面问题
解:与上一个问题本质一致,对于第n条折线,它与之前的n-1条折线最多有4(n-1)个交点,因此可以增加4(n-1)+1个平面。
状态转移方程:f(n) = f(n-1) + 4n - 3
方格铺骨牌问题1(2格骨牌铺2*n方格)
解:对于2*n的方格,先只考虑最右上角的方格,占据这个方格的骨牌只有两种铺设方式:竖着或者横着。
状态转移方程:f(n) = f(n-1) + f(n-2)
方格铺骨牌问题2(3种骨牌铺1*n方格)
解:同理,最后一个方格有三种铺设情况。
状态转移方程:f(n) = f(n-1) + f(n-2) + f(n-3)
男女生排队问题(女生不能单独站)
解#1:对于n人的队列考虑以下情况:
假如最后一个是男生:
前n-1个人组成的队列假如合法:√,有f(n-1)种情况
前n-1个人组成的队列假如非法:×,有0种情况
假如最后一个是女生(则第n-1个人也必须是女生):
前n-2个人组成的队列假如合法:√,有f(n-2)种情况
前n-2个人组成的队列假如非法:当只有第n-2个人是女生时√,有f(n-4)种情况
解#2:记f(n, 1)为长度为n,以男生结束的队列;f(n, 2)为长度为n,以女生结束的队列,则:
f(n) = f(n, 1) + f(n, 2)
f(n, 1) = f(n-1) = f(n-1, 1) + f(n-1, 2)
f(n, 2) = f(n-1, 2) + f(n-2, 1) //同样分合法非法讨论
状态转移方程:f(n) = f(n-1) + f(n-2) + f(n-4)
直线不相交问题(总共有n对)
解:就1号来说,他就只可以和偶数相连。假如和2相连,那么就是f(n-1)种情况;假如和4相连,那么就是f(n-2)种情况......
状态转移方程:f(n) = f(0) * f(n-1) + f(1) * f(n-2) + f(2) * f(n-3) + ... + f(n-1) * f(0)
概念:
卡特兰数(Catalan Number):第n项与前面每一项都有关系
前几项:1,2,5,14,42,132,429,1430,4862,16796...
求解公式: f(n) = C(2n, n) / (n+1) (n = 0, 1, 2...) or f(n) = f(n−1) ∗ (4∗n−2) / (n+1)
358

被折叠的 条评论
为什么被折叠?



