六级编程模板 · 最后冲刺默写清单

六级编程题 50 分,按真题统计 DP 是王(7/16)、树与搜索第二(5/16)、栈队列做工具。这 7 个模板覆盖六级大纲可拿分核心(另含完全二叉树、二分图染色两处真题补充)。目标是合上清单限时默写到能 AC。每个模板可一键盖住自测。

怎么用这张清单

用法:每个模板 ①盖住骨架自己默写 → ②对照检查 → ③做自测题限时 AC → ④回看易错点。所有骨架均为 C++14,已编译验证。

考场通用开头
C++14

大数组开全局;计数 / 求和题一律 long long,要取模就随时取模。

拿分策略 六级两道编程题里常有一道偏难。先把会的那道写满,难的那道写暴力 / 搜索拿部分分——数据范围小(如 n≤10)几乎都在暗示"可以暴力 DFS"。宁可一道满分一道部分分,也别两道都卡死。

一、搜索(DFS / BFS / 树遍历)

1

DFS 递归 + 回溯(全排列 / 选或不选)

难题保底
触发信号:数据范围很小(n≤10)、要"枚举所有方案 / 顺序"、求方案数或最优。难题保底神器。
C++14
✍️ 默写中点此显示骨架对照
易错点
  1. 选了要撤销used[i]=false),否则只走一条路。
  2. 终止条件 dep==n 写对,别越界。
  3. "选或不选"型:每层只分 选i / 不选i 两支。
限时自测P10377 好斗的牛(全排列)
2

BFS(网格最短步数 / 层序)

最短步数
触发信号:"最少几步""最短路径"且每步代价相同;或一层一层扩展。
C++14
✍️ 默写中点此显示骨架对照
易错点
  1. 入队时就标记 dist(别等出队再标),否则同点反复入队。
  2. 边界判断 + 障碍判断别漏。
  3. 最短步数用 BFS(不是 DFS);DFS 找的是"能不能到"。
🔁 变体 · 二分图黑白染色(真题 P11962 树上漫步)

从某点染 1,每个邻居染对方色:col[v] = 3 - col[u](BFS/DFS 都行)。树一定是二分图;"偶数步可达" = 与起点同色的点,答案就是同色点个数。

限时自测P11246 小杨和整数拆分(BFS 或 DP)
3

树的遍历(递归前中后序 + 邻接表 DFS)

触发信号:给一棵树,求深度 / 节点数 / 子树和、或按某顺序访问。
C++14
✍️ 默写中点此显示骨架对照
🌳 完全二叉树用数组存(大纲必考,真题 P11375 树上游走)

根编号 1:左孩子 2*i、右孩子 2*i+1、父亲 i/2。层序遍历就是按下标 1..n 顺序扫。

向上 i/=2、向下走时下标可能爆 int,记得用 long long

易错点
  1. 邻接表 DFS 一定带 fa 参数,if(v!=fa) 防止走回头路。
  2. 中序遍历 BST 得到的是升序序列(常考)。
  3. 子树大小 sz[u] 要在递归回来后累加。
限时自测P10722 二叉树(树上 DFS)/ P11375 树上游走

二、动态规划(六级第一大类,DP 是王)

4

一维线性 DP

爬楼梯型
触发信号:"方案数""最大 / 最小值"且当前状态只由前面几个状态推出(爬楼梯型)。
C++14
✍️ 默写中点此显示骨架对照
🧩 三件套

写 DP 先写清:①状态 dp[i] 表示什么 ②转移方程 ③初始化。最大子段和:dp[i]=max(a[i], dp[i-1]+a[i]),答案取所有 dp[i] 最大。

易错点
  1. 初始化 dp[0](或边界小项)必须对。
  2. 计数 DP 常要取模、用 long long
  3. 转移前判 i>=j 防越界。
限时自测P10250 下楼梯(入门)→ P10108 闯关游戏 / P11963 环线(最大子段和)
5

0-1 背包(简单背包)

背包
触发信号:n 件物品各有重量和价值,每件最多拿一次,容量限制下求最大价值。
C++14
✍️ 默写中点此显示骨架对照
易错点
  1. 0-1 背包内层 j 从大到小;完全背包(每件无限拿)才从小到大。
  2. j>=w[i] 才转移。
  3. "至少装 L"这类变体要改状态定义和初始化(求最小花费时初始化成 INF)。
限时自测B3873 小杨买饮料(0-1 背包变体,必做)

三、数据结构(栈队列做工具,BST 性质常考)

6

栈 / 队列 / 循环队列

工具
触发信号:括号匹配、表达式、"后进先出 / 先进先出"、用数组模拟队列。
C++14
✍️ 默写中点此显示骨架对照
易错点
  1. 循环队列下标用 % K;判满是 (tail+1)%K==head(牺牲一个位置)。
  2. STL pop() 不返回值,要先 top()/front() 取再 pop()
  3. 空栈 / 空队列再 pop 会出错,先判 empty()
限时自测:栈队列是 DFS/BFS 的底座,结合第 1、2 条一起练。
7

二叉排序树 BST(插入 / 查找 / 中序)

触发信号:"左小右大"的树、动态插入并保持有序、查找某值。
C++14
✍️ 默写中点此显示骨架对照
易错点
  1. 插入要 return r; 把子树接回去。
  2. BST 中序遍历 = 从小到大排好序(必背结论,常考判断题)。
  3. 哈夫曼编码、格雷编码是客观题概念(记原理即可,编程题不考建哈夫曼树);完全二叉树的数组表示见模板 3,真题考过编程(P11375)。
限时自测:BST 性质多在客观题;编程结合树遍历(第 3 条)练。

附 · 难题拿部分分

最后冲刺默写节奏(建议)

阶段默写模板限时自测(≤40 分钟/题)
第 1 天4 线性 DP · 5 背包P10250B3873
第 2 天1 DFS · 2 BFSP10377P11246
第 3 天3 树遍历 · 7 BSTP10722 / P11375
第 4 天6 栈队列 + 全部盖住各默 1 遍一套真题 2 道编程题
过关标准 每个模板能合上清单 10-15 分钟默写出可编译骨架,入门自测题 40 分钟内 AC。做到这个程度 + 客观题(10 套真题逐题讲义都过一遍),六级过线(≥60)很稳。

GESP6 · 六级编程模板默写清单 · C++14 · 离线可用