YBTOJ 「基础算法」第1章 递推算法

YBTOJ 「基础算法」第1章 递推算法


题目

A.错排问题

  • 状态设置 f i f_{i} fi 表示对于 i i i 个数的合法排列个数
  • 递推式 f i = ( i − 1 ) × ( f i − 1 + f i − 2 ) f_{i}=(i-1)\times(f_{i-1}+f_{i-2}) fi=(i1)×(fi1+fi2) ( n ≥ 3 ) (n\geq 3) (n3)
  • 思路:考虑数字 n n n放在合法位置的情况数为 n − 1 n-1 n1,而数字 n n n放在第 k k k个位置时,数字 k k k的放置情况分为两种,可以放在第 n n n个位置上,也可以放在其余 n − 2 n-2 n2个位置上。则当数字 n n n放在第 k k k个位置时,情况总数为 f i − 1 + f i − 2 f_{i-1}+f_{i-2} fi1+fi2

B.传球游戏

  • 状态设置 f i , j f_{i,j} fi,j 表示经过 j j j 个人后球在 i i i 手里
  • 递推式

f i , j = { f n , j − 1 + f 2 , j − 1 i = 1 f n − 1 , j − 1 + f 1 , j − 1 i = n f i + 1 , j − 1 + f i − 1 , j − 1 i ≠ n ≠ 1 f_{i,j}=\left\{ \begin{array}{rcl} f_{n,j-1} + f_{2,j-1} && {i=1}\\ f_{n-1,j-1} + f_{1,j-1} & & {i=n}\\ f_{i+1,j-1} + f_{i-1,j-1} & & {i\neq n\neq 1}\\ \end{array} \right. fi,j=fn,j1+f2,j1fn1,j1+f1,j1fi+1,j1+fi1,j1i=1i=ni=n=1

C.数的划分

  • 状态设置 f i , j f_{i,j} fi,j 表示把 i i i 分成 j j j 组的合法方案数
  • 递推式

f i , j = { 0 i < j 1 i = j f i − j , j + f i − 1 , j − 1 i > j f_{i,j}=\left\{ \begin{array}{rcl} 0&&{i<j}\\ 1&&{i=j}\\ f_{i-j,j} + f_{i-1,j-1}&&{i>j}\\ \end{array} \right. fi,j=01fij,j+fi1,j1i<ji=ji>j

D.栈的问题

  • 状态设置 f i , j f_{i,j} fi,j表示还有 i i i个数未输出, j j j个数没入栈的输出情况总数
  • 递推式

f i , j = { 1 j = 0 f i − 1 , j + f i , j − 1 j ≠ 0 f_{i,j}=\left\{ \begin{array}{rcl} 1 & & {j=0}\\ f_{i-1,j}+f_{i,j-1} & & {j\neq 0}\\ \end{array} \right. fi,j={1fi1,j+fi,j1j=0j=0

H.序列个数

  • 模型转化
    • 先对满足条件情况的属性进行分析
      1.位置:在第 i i i个位置前
      2.数值:小于等于 i i i
    • 联想到二维矩阵
  • 状态设置&递推式:(乘法原理推导)

关于应用递推算法情况

  • 在有限范围下
  • 扩展步骤相似
  • 题干要求满足某些条件的情况总数

关于状态设定

  • 决定答案的因素

  • 分解子问题思想

  • 如果推不出递推式,可以尝试多加状态


关于递推式

  • 重点分类讨论
  • 边界条件转移

关于注意事项

  • 在递推过程中,不能涉及未处理的状态
  • 对初始状态的准确设定
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值