分阶段练习索引
| 阶段 | 先掌握 | 建议练习 |
|---|---|---|
| 语言入门 | 输入输出、循环、数组、函数、类型 | 数位统计 P1554 |
| 引用与模板 | 值传参、引用、auto、lambda、模板参数 T | 用同一模板处理整数和小数,手算类型代入 |
| 语法基础中的 STL | string、vector、迭代器、排序、集合与映射 |
排序去重 P1059 |
| 传递计算动作 | std::function 的签名、保存动作、回调与递归调用 | 手算规则替换与调用返回,再运行本章例题 |
| 建模与提交 | 提取变量与约束、反例与证明、一题多模型、WA 排查与小规模对拍、大整数运算、提交模板 | 数的性质 P5710、数列分段 P1182 |
| 基础技巧 | 枚举、复杂度、前缀和、差分、双指针 | 区间和 P8218、区间修改 P2367 |
| 数论与结构 | GCD、筛法、快速幂、并查集 | 快速幂 P1226、并查集 P3367 |
| 算法策略与搜索 | 归并排序、二分、贪心、DFS、BFS、回溯、记忆化 | 迷宫 P1605、二分答案 P1182 |
| 动态规划与图论 | 从记忆化过渡到线性 DP、二维 DP、背包、最短路与生成树 | 背包 P1048、最短路 P3371 |
上表把各阶段的内容与练习接在一起,可配合自己选定的路线查阅。先用基本类型和原生数组写程序,再从引用、模板 T 走到 STL 和 std::function;算法部分从搜索与重复计算走到记忆化和 DP。
搜索章节最后学习记忆化搜索,随后接动态规划;两者的状态与前驱相同,计算顺序不同。
每学习一个模板,先手算一个小例子,再用自己的变量名实现一次。试着解释“这一轮处理什么、为什么这样更新、怎样得到答案”,比记住代码形状更有帮助。