【算法复健】递推与递归

题单-递推与递归 做题整理

P1255 数楼梯

斐波那契数列,写个大整数类直接算


P1022 [NOIP 2002 普及组] 过河卒

dp,非法点不计入即可


P1044 [NOIP 2004 普及组] 栈

设 $f[i][j] $是有 $i $个数未入栈,且 $j $个数在栈中的方案数。

初始情况是 $f[0][j]=1 $,最终目标是求 $f[n][0] $。

转移有两种情况:

入栈: $f[i][j] \leftarrow f[i-1][j+1] $

出栈: $f[i][j] \leftarrow f[i][j-1] $


P1028 [NOIP 2001 普及组] 数的计算

DFS,考虑当前数字 $x $,枚举 $1 \rightarrow \frac{x}{2} $的可能性,结束后计入总数即可


P1464 Function

为了防止大量递归浪费资源,考虑记忆化搜索


P1928 外星密码

递归,处理以下情况:

  • 读到“[”:往下读一个重复数量,然后继续递归,接着复制递归得到的字符串
  • 读到“]”:结束本次函数
  • 无复制情况,直接拼接

P2437 蜜蜂路线

情况同第一题


P1164 小A点菜

类似 01 背包的机制,考虑 $f[i][j] $表示前 $i $个物品用 $j $元的方案数,有以下情况:

  • $j = a_i: f[i][j] = f[i-1][j] + 1 $
  • $j < a_i: f[i][j] = f[i-1][j] $
  • $j > a_i: f[i][j] = f[i-1][j] + f[i-1][j-a_i] $

P1036 [NOIP 2002 普及组] 选数

DFS 枚举每一种可能性。

最后检测的时候直接把全部取的数加起来,判断是否为质数即可。


P3612 [USACO17JAN] Secret Cow Code S

注意题目的机制是复制最后一个字符再按照原来顺序从头复制。

那么就需要依照递归的思想,判断出对应位置的字符在原始字符串的什么位置。

我们逐步削减 $n $的大小。

假如现在 $n $处于 $S = len \times 2^k $长度的字符串中。

要将其挪到前半部分,那就让 $n - \frac{len}{2} $。

此时应当特判 $n = 0 $的情况,因为这时候说明就是复制的末尾字符。


P1259 黑白棋子的移动

观察样例的移动方式。

在前缀剩下长度 8 需要移动前,都是依照的:相邻黑白棋移到右边,最右边的两黑棋移到中间的方式。

这部分直接写个循环即可。

接着剩下的部分直接抄样例。


P1010 [NOIP 1998 普及组] 幂次方

递归,对 $n $每一个是 1 的二进制位分类讨论:

  • $n = 0: 2(0) $
  • $n = 1: 2 $
  • $n > 1: 2(f(i)) $,如果不是最后就要加上 '+'

P1990 覆盖墙壁

考虑两种情况:

  • 两行填满,记 $f[i] $是前 $i $列被填满的方案数
  • 只填一行,记 $g[i] $是前 $i-1 $列被填满,第 $i $列填了一个的方案数量

那么只需要对于填两种形状的单位分类讨论,最终得到转移方程:

  • $f[i] = f[i-1] + f[i-1] + 2 \times g[i-2] $
  • $g[i] = f[i-1] + g[i-1] $

总之就是具体到不同情况分类。


P1498 南蛮图腾

规律还是有迹可循的。

每一个 $n $图形都是对于 $n-1 $图形复制得到的。

对于一个单位图形向右复制再向右下复制(倒过来处理)。

具体到每个字符进行复制就行了。

posted @ 2025-12-05 16:36  R4y  阅读(3)  评论(0)    收藏  举报