题目列表
可按标题、OJ、标签和启发记录快速筛选题目解析。
| 标题 | OJ | 题号 | 标签 | 难度 | 最后更新 | 原题 |
|---|---|---|---|---|---|---|
先把打乱后的座位顺序映射成原座位下标序列,再把不满值转化成这个整数序列的逆序对数量。 | luogu | P5149 | 普及+/提高 | 2026-06-21 15:31 | 打开 | |
利用每轮比赛前排名有序的性质,打完后胜者组和败者组各自仍有序,再线性归并回新排名。 | luogu | P1309 | 普及+/提高 | 2026-06-21 15:27 | 打开 | |
把 01 串的最长不下降子序列转成前缀差值区间最大值,最长上升子序列则只需判断是否存在 0 在 1 前面。 | luogu | P7809 | 提高+/省选- | 2026-06-21 14:58 | 打开 | |
把极大极小乘积按 B 区间符号分三类讨论,只需在 A 区间查询最值、最小正数、最大负数和是否有零。 | luogu | P8818 | 提高+/省选- | 2026-06-21 14:48 | 打开 | |
按 b_i 从大到小离线,把满足 a_j >= 当前阈值的位置加入有序集合,再查询环上最近活跃点距离。 | luogu | P7333 | 普及+/提高 | 2026-06-21 14:44 | 打开 | |
按 N 与 M 的大小分类,把条件改写成在前半串循环串中匹配一段前后缀,再用 KMP 与哈希统计可行配对。 | luogu | P3318 | 提高+/省选- | 2026-06-21 14:34 | 打开 | |
按被询问到的每个 k 分开离线模拟,只维护该 k 的向后串计数;合并分裂时只更新边界附近 k-1 个起点。 | luogu | P3823 | NOI/NOI+/CTSC | 2026-06-21 14:25 | 打开 | |
枚举删除的那一位,把删掉该位后相同的字符串分到同一组,每组贡献组合数。 | luogu | P4503 | 普及+/提高 | 2026-06-21 14:19 | 打开 | |
先按全 # 边框切出所有窗口,再把每个窗口在允许旋转下做最小表示,用集合统计不同图案个数。 | luogu | P3678 | 普及/提高- | 2026-06-21 14:15 | 打开 | |
把所有 DNA 串拼接后按长度 k 的前缀分组,统计每个相同碱基串在各物种中的出现次数,再做组合计数。 | luogu | P8643 | 提高+/省选- | 2026-06-21 14:08 | 打开 | |
利用插入字符只会落在中间分界线两侧之一,分别线性判断两种情况,再分类讨论唯一性。 | luogu | P6739 | 普及+/提高 | 2026-06-21 14:01 | 打开 | |
先求每个后缀有多长前缀能作为 s 的子序列,再按后缀字典序和两两 LCP 去重统计不同字符串。 | luogu | P7469 | 提高+/省选- | 2026-06-21 13:46 | 打开 | |
把长度为 8 的子串和密码都转成 26 个字母的计数签名,再用滑动窗口统计每种签名出现次数。 | luogu | P8630 | 普及/提高- | 2026-06-21 13:43 | 打开 | |
利用字典保持插入顺序的特性,用 dict.fromkeys 一步完成保序去重。 | luogu | P4305 | 入门 | 2026-06-21 13:40 | 打开 | |
枚举跳跃高度和连跳次数,在固定参数下对位置与当前连跳进度做记忆化搜索,最后减去升级费用并比较最优方案。 | luogu | P3257 | 提高+/省选- | 2026-06-21 13:32 | 打开 | |
设 dp[i][j][s] 表示前 i 轮、已经换 j 次手势且当前手势为 s 时的最大胜场数。 | luogu | P3609 | 普及/提高- | 2026-06-21 13:27 | 打开 | |
设 dp[i][j][c] 表示走到第 i 行第 j 个位置且用了 c 次三倍经验时的最大得分,再按左右两个父节点转移。 | luogu | P1544 | 普及/提高- | 2026-06-21 13:24 | 打开 | |
设 dp[i][j] 表示前 i 分钟、移动 j 次后最多接到多少苹果,当前位置由 j 的奇偶唯一确定。 | luogu | P2690 | 普及/提高- | 2026-06-21 13:20 | 打开 | |
把食物网看成 DAG,令入度为 0 的点作为起点,按拓扑序递推每个点的路径条数。 | luogu | P3183 | 普及/提高- | 2026-06-21 13:16 | 打开 | |
把交替加法过程改写成 Fibonacci 型递推,再利用模 p 的周期在有限步内判断谁先变成 0。 | luogu | P5635 | 普及/提高- | 2026-06-21 13:10 | 打开 | |
按题目分支写递归函数,并用 lru_cache 记忆化 1 到 20 范围内的重复状态。 | luogu | P1464 | 普及/提高- | 2026-06-21 13:06 | 打开 | |
先用 Z 函数求每个位置和字典串前缀的最长匹配长度,再把这些匹配视作区间覆盖做最少跳数贪心。 | luogu | P8112 | 提高+/省选- | 2026-06-21 12:51 | 打开 | |
按到达事件推进时间,维护当前运行进程和等待优先队列,遇到更高优先级进程时立即抢占。 | luogu | P2278 | 普及+/提高 | 2026-06-21 12:43 | 打开 | |
按保质期从后往前安排每天吃什么,用小根堆维护当前仍可食用的最便宜巧克力。 | luogu | P8769 | 普及/提高- | 2026-06-21 12:39 | 打开 | |
按计算机分别维护当前运行任务的小根堆,先弹出已结束任务,再判断剩余算力是否足够。 | luogu | P8755 | 普及/提高- | 2026-06-21 12:36 | 打开 | |
每次合并当前最小的两堆果子,等价于构造 Huffman 树,用 Python 的 heapq 维护小根堆。 | luogu | P1090 | 普及/提高- | 2026-06-21 12:34 | 打开 | |
先预处理一段村庄只建一个邮局的代价,再做邮局数量分层 DP,并用决策单调性做分治优化。 | luogu | P4767 | 提高+/省选- | 2026-06-21 12:31 | 打开 | |
把环断成长度为 n 的所有链段,做区间 DP,同时维护最小合并代价和最大合并代价。 | luogu | P1880 | 普及+/提高 | 2026-06-21 12:27 | 打开 | |
把删点顺序转成树边定向,再做树形 DP,维护子树向根汇总权值与根向下可达点数的 Pareto 状态。 | luogu | P9111 | 提高+/省选- | 2026-06-21 11:27 | 打开 | |
先用一元生成函数统计普通子树的剪枝顺序,再在 1 到 x 的路径上做带“前后分配”的树形计数 DP。 | luogu | P8935 | 省选/NOI- | 2026-06-21 10:41 | 打开 | |
把装备合成关系看成森林,设 f[u][j][c] 表示在 u 的子树里留出 j 个 u 给父亲继续合成、花费 c 金币时能得到的最大力量值,再做树形分组背包合并子树。 | luogu | P4037 | 提高+/省选- | 2026-06-21 10:35 | 打开 | |
把每张钞票看成独立物品,做 2 维 DP:dp[a][b] 表示最终分给 Alice 金额为 a、Bob 金额为 b 时最多能保留多少张原主人不变的钞票,答案是总张数减去最多保留张数。 | luogu | P4026 | 提高+/省选- | 2026-06-21 10:28 | 打开 | |
做树上背包,设 f[u][j][sel][cov] 表示子树内选了 j 个点、u 是否放设备、u 是否被儿子监听的方案数,合并儿子时判断儿子是否能被父亲覆盖。 | luogu | P4516 | 提高+/省选- | 2026-06-21 10:23 | 打开 | |
离散菜先做凹费用完全背包求每个整数重量的最优值,连续菜再把剩余重量写成分段二次函数最优分配,最后合并两部分答案。 | luogu | P6893 | 提高+/省选- | 2026-06-21 10:15 | 打开 | |
先做一个容量 200 的 0/1 背包,求每个总 p 下能得到的最大总 k,再按回合数与 d 值差做极小极大动态规划。 | luogu | P7097 | 提高+/省选- | 2026-06-21 09:59 | 打开 | |
先用完全背包预处理“花费 x 资源当秒最多新增多少采集效率”,再按时间推进 DP:dp[j] 表示当前手里有 j 资源时的最大已有采集效率。 | luogu | P3891 | 提高+/省选- | 2026-06-21 09:44 | 打开 | |
把最多 5 种商品的购买数量压成 base-6 状态,把优惠包和单买都当成转移,在所有合法购买状态上做最短路式动态规划。 | luogu | P2732 | 普及+/提高 | 2026-06-21 09:39 | 打开 | |
把每个任务的选择压成 A 机器总时间这一维,设 dp[x] 表示 A 用时为 x 时 B 的最小用时,最后在所有状态里取 max(A,B) 的最小值。 | luogu | P2224 | 普及+/提高 | 2026-06-21 09:30 | 打开 | |
先把可行性化成“所选挂钩总数至少是所选挂饰数减一”,再把挂饰分成必选、必不选和可选三类,对负收益但能加挂钩的部分做 0/1 背包。 | luogu | P4138 | 提高+/省选- | 2026-06-21 09:19 | 打开 | |
把第 i 个小矮人逃走前的条件整理成“已逃走肩高前缀不超过 T+a_i+b_i-H”,再按 a+b 排序并用大根堆维护最多可行人数。 | luogu | P4823 | 提高+/省选- | 2026-06-21 08:50 | 打开 | |
把每个式子化成 `(#s-#c, #s+#c)`,再做差值背包,求总差值为 0 时总长度最大,答案就是长度的一半。 | luogu | P4832 | 提高+/省选- | 2026-06-21 07:59 | 打开 | |
把分批完成的总费用用前缀和展开成线性形式后,对每个分界点建立直线,用单调队列做斜率优化 DP。 | luogu | P5785 | 提高+/省选- | 2026-06-21 07:48 | 打开 | |
把连续分段费用写成前缀和形式后,展开平方得到标准斜率优化 DP,用单调队列维护下凸壳。 | luogu | P3195 | 提高+/省选- | 2026-06-21 07:42 | 打开 | |
用前缀和写出连续分段的建仓代价后,把 DP 转移整理成关于位置 x 的直线最小值查询,并用单调队列做斜率优化。 | luogu | P2120 | 提高+/省选- | 2026-06-21 07:36 | 打开 | |
先删除所有被支配矩形,把问题化成连续分段 DP,再用单调队列维护凸包优化转移。 | luogu | P2900 | 提高+/省选- | 2026-06-21 07:31 | 打开 | |
把每个站点上的换乘 DP 写成关于发车时刻 p 的直线最小值查询,再按时间扫描并为每个站维护单调队列凸包。 | luogu | P6302 | 省选/NOI- | 2026-06-21 07:23 | 打开 | |
把二维偏序上的最大收益路径 DP 拆成按列扫描,再用两层单调凸包分别处理历史列转移和当前列内的纵向转移。 | luogu | P4056 | 省选/NOI- | 2026-06-21 07:09 | 打开 | |
把每个点看成按 x 坐标有向无环图上的一个状态,接收费用可整理成关于目标坐标 x 的直线,用 Li Chao Tree 维护左侧所有可转移点的最小值。 | luogu | P2497 | 省选/NOI- | 2026-06-21 06:57 | 打开 | |
把家庭按最终去的会场分成 4 段,设 dp[k][i] 表示前 i 户用了 k 个中间会场的最小代价,再把区间代价整理成直线形式,用斜率优化把 3 层转移压到线性。 | luogu | P8632 | 提高+/省选- | 2026-06-21 06:52 | 打开 | |
把每位同学的到达时刻平移为“最早可被接走的回程时刻”,再设 dp[x] 表示最后一班车在时刻 x 返回时的最小等待和,并用斜率优化维护转移直线。 | luogu | P5017 | 提高+/省选- | 2026-06-21 06:36 | 打开 | |
用双指针枚举答案区间,再用单调队列维护当前窗口内“长度恰好为 d 的子段最大和”,从而快速判断把哪一段清零后能否让总和不超过 p。 | luogu | P3594 | 提高+/省选- | 2026-06-21 06:31 | 打开 | |
设 dp[i] 表示到第 i 棵树的最少疲劳跳跃次数,用单调队列维护最近 k 棵树里“dp 更小且高度更优”的候选前驱,把每次询问做到 O(n)。 | luogu | P3572 | 提高+/省选- | 2026-06-21 06:25 | 打开 | |
把每段固定方向的时间看成一次行或列上的区间转移,设 dp[x][y] 表示当前位置最大滑行距离,再用单调队列优化每段的滑动窗口最大值。 | luogu | P2254 | 提高+/省选- | 2026-06-21 06:17 | 打开 | |
设 dp[i][j] 表示第 i 天结束时持有 j 股的最大收益,把买卖转移改写成区间最值,再用单调队列把每一天优化到 O(MaxP)。 | luogu | P2569 | 提高+/省选- | 2026-06-21 06:05 | 打开 | |
先二分最长段长度的最小可行值,再在该上界下用滑动窗口优化的计数 DP 统计所有合法连续划分方案。 | luogu | P2511 | 提高+/省选- | 2026-06-21 06:00 | 打开 | |
设 dp[i][j] 表示长度为 i、逆序对数为 j 的排列个数,再用插入最大值的转移和前缀和把求和优化到 O(nk)。 | luogu | P2513 | 普及+/提高 | 2026-06-21 05:55 | 打开 | |
把每一行压成二进制状态,预处理单行合法状态后按行做状压 DP,统计所有不相邻的种草方案数。 | luogu | P1879 | 普及+/提高 | 2026-06-21 05:51 | 打开 | |
先预处理单行合法状态,再按行做只依赖前两行的状压 DP,求最多能放多少炮兵。 | luogu | P2704 | 提高+/省选- | 2026-06-21 05:42 | 打开 | |
枚举两只小猪反推出一条合法下凹抛物线,把每条抛物线离散成一个覆盖集合,再做最少集合覆盖的状压 DP。 | luogu | P2831 | 提高+/省选- | 2026-06-21 05:36 | 打开 | |
把较短维压成二进制状态,按行做三行覆盖检查的轮廓 DP,并用 `(总代价, 油库数量)` 做字典序最优。 | luogu | P3888 | 提高+/省选- | 2026-06-21 05:30 | 打开 |