- C++
洛谷题单【算法1-4】递推与递归题型分析及难度评价
- 2025-5-26 22:09:22 @
洛谷题单【算法1-4】递推与递归题型分析及难度评价 https://www.luogu.com.cn/training/109#information
一、题型分类:递推题与递归题
1. 递推题(从初始条件出发逐步推导结果)
题号 | 题目名称 | 递推类型 | 难度星级(1-5) | 核心考点 |
---|---|---|---|---|
P1255 | 数楼梯 | 线性递推(斐波那契) | ⭐☆☆☆☆ | 基础递推入门,状态转移方程f(n)=f(n-1)+f(n-2) ,类似爬楼梯问题。 |
P1002 | [NOIP] 过河卒 | 二维递推(矩阵DP) | ⭐⭐☆☆☆ | 棋盘路径计数,需处理障碍点,状态转移方程f(i,j)=f(i-1,j)+f(i,j-1) 。 |
P1044 | [NOIP] 栈 | 卡特兰数递推 | 栈的出栈序列计数,直接套用卡特兰数公式C(2n,n)/(n+1) ,需理解组合数学推导。 |
|
P2437 | 蜜蜂路线 | 线性递推 | ⭐☆☆☆☆ | 蜂窝路径计数,状态转移f(n)=f(n-1)+f(n-2) ,类似斐波那契数列。 |
P1164 | 小A点菜 | 线性递推(背包) | ⭐⭐☆☆☆ | 0-1背包问题的变形,递推式f[j] += f[j-a[i]] ,求方案数而非最大值。 |
P1036 | [NOIP] 选数 | 递归+递推(组合) | 组合数递推求解,需预处理素数表,再用递归或递推统计选数组合。 | |
P1990 | 覆盖墙壁 | 二维递推(状态压缩) | ⭐⭐⭐☆☆ | 用状态压缩表示墙壁覆盖状态,递推转移时考虑横/竖放置瓷砖的情况。 |
P1228 | 地毯填补问题 | 分治递推 | 棋盘覆盖问题,利用分治思想将大问题分解为小问题,递推填充地毯。 |
2. 递归题(将问题分解为子问题求解)
题号 | 题目名称 | 递归类型 | 难度星级(1-5) | 核心考点 |
---|---|---|---|---|
P1028 | [NOIP] 数的计算 | 记忆化递归 | ⭐☆☆☆☆ | 递归计算满足条件的数的个数,状态转移f(n)=f(n)+f(k) (k≤n/2),需记忆化去重。 |
P1464 | Function | 递归+数学推导 | ⭐⭐☆☆☆ | 多层递归调用,按题意模拟函数F(a,b,c) 的递归逻辑,注意终止条件。 |
P1928 | 外星密码 | 递归展开 | 递归解析嵌套的密码字符串,按规则展开重复部分,需处理多层嵌套。 | |
P3612 | [USACO] Secret Cow Code | 递归定位 | 在递归生成的字符串中定位第k个字符,通过递归计算子串长度缩小搜索范围。 | |
P1010 | [NOIP] 幂次方 | 递归表示 | 将数表示为2的幂次方形式,递归分解数值,处理指数的递归输出(如2(2(2)+2+2^0) )。 |
|
P1259 | 黑白棋子的移动 | 递归模拟 | ⭐⭐⭐☆☆ | 递归模拟棋子移动过程,寻找最少步数,需记录状态避免重复搜索。 |
P1498 | 南蛮图腾 | 递归绘制 | 递归生成分形图案,按层次绘制线条,考验递归逻辑的空间想象能力。 |
二、难度星级与核心特征总结
题号 | 题目名称 | 题型 | 难度 | 关键技巧 |
---|---|---|---|---|
P1255 | 数楼梯 | 递推 | 普及− | 一维线性递推,状态转移简单,适合递推入门。 |
P1002 | 过河卒 | 二维矩阵递推,处理障碍点的路径计数,需初始化边界条件。 | ||
P1044 | 栈 | 卡特兰数的应用,需理解栈出栈序列与卡特兰数的关系,直接计算组合数。 | ||
P1028 | 数的计算 | 递归 | 记忆化递归减少重复计算,状态定义为f(n) 表示n的合法数个数,递归式f(n)+=f(k) 。 |
|
P1464 | Function | 多层递归嵌套,按题目描述直接实现函数逻辑,注意参数范围和终止条件。 | ||
P1928 | 外星密码 | 普及/提高− | 递归解析字符串中的重复模式(如A(3)BC 展开为AAABC ),处理嵌套括号。 |
|
P2437 | 蜜蜂路线 | 递推 | 普及− | 蜂窝路径的递推计数,与斐波那契数列逻辑相同,注意起点和终点的索引转换。 |
P1164 | 小A点菜 | 递推(背包) | 0-1背包求方案数,递推式f[j] += f[j-a[i]] ,初始化f[0]=1 。 |
|
P1990 | 覆盖墙壁 | 递推 | 普及/提高− | 状态压缩递推,用二进制表示墙壁覆盖状态,转移时考虑横/竖瓷砖的放置方式。 |
P3612 | Secret Cow Code | 递归 | 普及− | 递归生成字符串时不实际构造字符串,而是通过长度计算直接定位目标字符,优化效率。 |
P1498 | 南蛮图腾 | 普及/提高− | 分形图形的递归绘制,每层图案由下层图案旋转、复制得到,需理解分形的递归结构。 |
三、学习建议
-
递推题入门顺序:
- 先练习线性递推(P1255数楼梯、P2437蜜蜂路线),掌握一维状态转移;
- 再尝试二维递推(P1002过河卒)和背包递推(P1164小A点菜),理解状态维度扩展。
-
递归题核心要点:
- 递归的关键是定义子问题(如
f(n)
的含义)和终止条件(如n≤1
时返回固定值); - 记忆化递归(如P1028数的计算)可避免重复计算,大幅提高效率;
- 复杂递归题(如P1498南蛮图腾)需先画出前几层图案,找出递归规律。
- 递归的关键是定义子问题(如
-
递推与递归的转换:
- 递推是递归的迭代实现,通常效率更高(无栈开销);
- 部分题目(如斐波那契数列)既可递推也可递归,建议优先用递推(如P1255)。
-
易错点提醒:
- 递推题注意初始化边界条件(如过河卒的障碍点
f(i,j)=0
); - 递归题注意栈溢出(如P1464的递归深度),必要时用记忆化或转换为递推;
- 卡特兰数题(P1044)需注意数据范围,可能需要高精度计算。
- 递推题注意初始化边界条件(如过河卒的障碍点
如果需要某道题的具体递推式、递归逻辑或代码框架,可以进一步提问哦!
0 条评论
目前还没有评论...