diff --git a/site/index.html b/site/index.html index ca89ca3..0988718 100644 --- a/site/index.html +++ b/site/index.html @@ -51,7 +51,7 @@ - + diff --git a/site/public/llms.txt b/site/public/llms.txt index d93321d..dc36f77 100644 --- a/site/public/llms.txt +++ b/site/public/llms.txt @@ -12,74 +12,74 @@ ## 入口 -- [DP大师 · DP Master](https://dp.round1.cc/): DP大师面向算法学习者,用精讲、逐帧可视化、题目索引和小游戏讲清状态定义、转移顺序与模型迁移。(最近更新:2026-08-23T21:18:04+08:00) -- [通用方法论 · DP大师](https://dp.round1.cc/method): 用状态设计、转移方程、计算顺序、空间优化和调试清单,建立可复用的动态规划解题方法。(最近更新:2026-08-23T21:18:04+08:00) -- [题目索引 · DP大师](https://dp.round1.cc/problems): 按 DP 家族、课程、难度和关键词检索教程中的例题与练习,快速定位对应的洛谷题目和学习路径。(最近更新:2026-08-23T21:18:04+08:00) +- [DP大师 · DP Master](https://dp.round1.cc/): DP大师面向算法学习者,用精讲、逐帧可视化、题目索引和小游戏讲清状态定义、转移顺序与模型迁移。(最近更新:2026-08-27T05:20:51.219Z) +- [通用方法论 · DP大师](https://dp.round1.cc/method): 用状态设计、转移方程、计算顺序、空间优化和调试清单,建立可复用的动态规划解题方法。(最近更新:2026-08-27T05:20:51.219Z) +- [题目索引 · DP大师](https://dp.round1.cc/problems): 按 DP 家族、课程、难度和关键词检索教程中的例题与练习,快速定位对应的洛谷题目和学习路径。(最近更新:2026-08-27T05:20:51.219Z) ## 背包 DP(A) -- [背包 DP · DP大师](https://dp.round1.cc/part/a): 背包 DP学习路径以“容量受限下的取舍:物品件数属性决定了背包的谱系。”为主线,串联 9 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-23T21:18:04+08:00) -- [01 背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/01): 01 背包课程回答“每件物品只能取一次时,为什么容量必须逆序更新”。内容以取或不取·一维逆推·恰好装满为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [完全背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/complete): 完全背包课程回答“物品可无限取用时,正序更新如何复用本轮状态”。内容以无限件·一维正推为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [多重背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/multiple): 多重背包课程回答“有限件物品怎样从朴素枚举优化到二进制或单调队列”。内容以朴素·二进制·单调队列为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [分组背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/group): 分组背包课程回答“每组至多选一件时,如何隔离组内选择”。内容以每组至多选一件为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [混合背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/mixed): 混合背包课程回答“01、完全和多重物品怎样共用一套转移框架”。内容以01/完全/多重同题为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [二维费用背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/cost2d): 二维费用背包课程回答“同时受两种容量约束时,状态维度与枚举顺序如何设计”。内容以两种费用同时受限为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [有依赖的背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/dep): 有依赖的背包课程回答“带主件附件依赖的选择怎样转化为合法组合”。内容以主件-附件·依赖→分组为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [背包综合变形 · 背包 DP · DP大师](https://dp.round1.cc/part/a/variant): 背包综合变形课程回答“背包模型如何扩展到计数、撤销和方案恢复”。内容以方案数·撤销·具体方案为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [辨析:分数背包=贪心 · 背包 DP · DP大师](https://dp.round1.cc/part/a/fractional): 辨析:分数背包=贪心课程回答“为什么可分割物品属于贪心而不是 01 背包”。内容以可分割⇒贪心 vs 整取⇒DP为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) +- [背包 DP · DP大师](https://dp.round1.cc/part/a): 背包 DP学习路径以“容量受限下的取舍:物品件数属性决定了背包的谱系。”为主线,串联 9 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-27T05:20:51.219Z) +- [01 背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/01): 01 背包课程回答“每件物品只能取一次时,为什么容量必须逆序更新”。内容以取或不取·一维逆推·恰好装满为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.030Z) +- [完全背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/complete): 完全背包课程回答“物品可无限取用时,正序更新如何复用本轮状态”。内容以无限件·一维正推为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.030Z) +- [多重背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/multiple): 多重背包课程回答“有限件物品怎样从朴素枚举优化到二进制或单调队列”。内容以朴素·二进制·单调队列为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.033Z) +- [分组背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/group): 分组背包课程回答“每组至多选一件时,如何隔离组内选择”。内容以每组至多选一件为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.032Z) +- [混合背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/mixed): 混合背包课程回答“01、完全和多重物品怎样共用一套转移框架”。内容以01/完全/多重同题为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.032Z) +- [二维费用背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/cost2d): 二维费用背包课程回答“同时受两种容量约束时,状态维度与枚举顺序如何设计”。内容以两种费用同时受限为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.030Z) +- [有依赖的背包 · 背包 DP · DP大师](https://dp.round1.cc/part/a/dep): 有依赖的背包课程回答“带主件附件依赖的选择怎样转化为合法组合”。内容以主件-附件·依赖→分组为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.031Z) +- [背包综合变形 · 背包 DP · DP大师](https://dp.round1.cc/part/a/variant): 背包综合变形课程回答“背包模型如何扩展到计数、撤销和方案恢复”。内容以方案数·撤销·具体方案为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.034Z) +- [辨析:分数背包=贪心 · 背包 DP · DP大师](https://dp.round1.cc/part/a/fractional): 辨析:分数背包=贪心课程回答“为什么可分割物品属于贪心而不是 01 背包”。内容以可分割⇒贪心 vs 整取⇒DP为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.031Z) ## 线性 DP(B) -- [线性 DP · DP大师](https://dp.round1.cc/part/b): 线性 DP学习路径以“把问题排成一条推进的序列,dp[i] 只依赖更早的状态。”为主线,串联 7 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-23T21:18:04+08:00) -- [路径型 / 递推入门 · 线性 DP · DP大师](https://dp.round1.cc/part/b/path): 路径型 / 递推入门课程回答“沿序列或网格推进时,如何定义最小充分状态”。内容以数字三角形·过河卒·方格取数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [最大子段和 · 线性 DP · DP大师](https://dp.round1.cc/part/b/maxseg): 最大子段和课程回答“如何用一个局部状态维护最大连续子段”。内容以Kadane·环形·两段不相交为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [最长上升子序列 LIS · 线性 DP · DP大师](https://dp.round1.cc/part/b/lis): 最长上升子序列 LIS课程回答“最长上升子序列如何从二次转移优化到对数查找”。内容以O(n²) 与 O(n log n)·导弹拦截为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [最长公共子序列 LCS · 线性 DP · DP大师](https://dp.round1.cc/part/b/lcs): 最长公共子序列 LCS课程回答“两个序列的公共结构如何通过二维状态刻画”。内容以排列 LCS→LIS·计数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [编辑距离 · 线性 DP · DP大师](https://dp.round1.cc/part/b/edit): 编辑距离课程回答“插入、删除和替换如何统一进编辑距离转移”。内容以删/插/改三向转移为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [线性状态机 DP · 线性 DP · DP大师](https://dp.round1.cc/part/b/fsm): 线性状态机 DP课程回答“带持有或选择限制的问题怎样画成有限状态机”。内容以受限选取·股票买卖为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [计数 / 划分型 · 线性 DP · DP大师](https://dp.round1.cc/part/b/count): 计数 / 划分型课程回答“计数与划分问题如何避免重复或遗漏方案”。内容以方案数·高精度·整数划分为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) +- [线性 DP · DP大师](https://dp.round1.cc/part/b): 线性 DP学习路径以“把问题排成一条推进的序列,dp[i] 只依赖更早的状态。”为主线,串联 7 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-27T05:20:51.219Z) +- [路径型 / 递推入门 · 线性 DP · DP大师](https://dp.round1.cc/part/b/path): 路径型 / 递推入门课程回答“沿序列或网格推进时,如何定义最小充分状态”。内容以数字三角形·过河卒·方格取数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.022Z) +- [最大子段和 · 线性 DP · DP大师](https://dp.round1.cc/part/b/maxseg): 最大子段和课程回答“如何用一个局部状态维护最大连续子段”。内容以Kadane·环形·两段不相交为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.035Z) +- [最长上升子序列 LIS · 线性 DP · DP大师](https://dp.round1.cc/part/b/lis): 最长上升子序列 LIS课程回答“最长上升子序列如何从二次转移优化到对数查找”。内容以O(n²) 与 O(n log n)·导弹拦截为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.037Z) +- [最长公共子序列 LCS · 线性 DP · DP大师](https://dp.round1.cc/part/b/lcs): 最长公共子序列 LCS课程回答“两个序列的公共结构如何通过二维状态刻画”。内容以排列 LCS→LIS·计数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.021Z) +- [编辑距离 · 线性 DP · DP大师](https://dp.round1.cc/part/b/edit): 编辑距离课程回答“插入、删除和替换如何统一进编辑距离转移”。内容以删/插/改三向转移为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.020Z) +- [线性状态机 DP · 线性 DP · DP大师](https://dp.round1.cc/part/b/fsm): 线性状态机 DP课程回答“带持有或选择限制的问题怎样画成有限状态机”。内容以受限选取·股票买卖为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.019Z) +- [计数 / 划分型 · 线性 DP · DP大师](https://dp.round1.cc/part/b/count): 计数 / 划分型课程回答“计数与划分问题如何避免重复或遗漏方案”。内容以方案数·高精度·整数划分为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.036Z) ## 区间 DP(C) -- [区间 DP · DP大师](https://dp.round1.cc/part/c): 区间 DP学习路径以“dp[l][r] 表示区间最优,枚举分割/合并点,按长度递推。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-23T21:18:04+08:00) -- [石子合并(链形) · 区间 DP · DP大师](https://dp.round1.cc/part/c/stone): 石子合并(链形)课程回答“区间合并代价为何要按长度递增计算”。内容以区间合并基础模型为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [环形区间 DP · 区间 DP · DP大师](https://dp.round1.cc/part/c/ring): 环形区间 DP课程回答“环形区间怎样通过复制序列转化为链形区间”。内容以断环为链·能量项链为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [回文 / 括号 · 区间 DP · DP大师](https://dp.round1.cc/part/c/palindrome): 回文 / 括号课程回答“端点匹配如何组织回文与括号类转移”。内容以收缩扩展·端点匹配为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [加分二叉树型 · 区间 DP · DP大师](https://dp.round1.cc/part/c/tree): 加分二叉树型课程回答“枚举区间根节点时,子区间如何对应左右子树”。内容以枚举根·区间即子树为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [合并 / 删除类 · 区间 DP · DP大师](https://dp.round1.cc/part/c/merge): 合并 / 删除类课程回答“合并与删除过程怎样压缩成区间状态”。内容以2048·区间删除代价为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) +- [区间 DP · DP大师](https://dp.round1.cc/part/c): 区间 DP学习路径以“dp[l][r] 表示区间最优,枚举分割/合并点,按长度递推。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-27T05:20:51.219Z) +- [石子合并(链形) · 区间 DP · DP大师](https://dp.round1.cc/part/c/stone): 石子合并(链形)课程回答“区间合并代价为何要按长度递增计算”。内容以区间合并基础模型为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.027Z) +- [环形区间 DP · 区间 DP · DP大师](https://dp.round1.cc/part/c/ring): 环形区间 DP课程回答“环形区间怎样通过复制序列转化为链形区间”。内容以断环为链·能量项链为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.026Z) +- [回文 / 括号 · 区间 DP · DP大师](https://dp.round1.cc/part/c/palindrome): 回文 / 括号课程回答“端点匹配如何组织回文与括号类转移”。内容以收缩扩展·端点匹配为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.025Z) +- [加分二叉树型 · 区间 DP · DP大师](https://dp.round1.cc/part/c/tree): 加分二叉树型课程回答“枚举区间根节点时,子区间如何对应左右子树”。内容以枚举根·区间即子树为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.026Z) +- [合并 / 删除类 · 区间 DP · DP大师](https://dp.round1.cc/part/c/merge): 合并 / 删除类课程回答“合并与删除过程怎样压缩成区间状态”。内容以2048·区间删除代价为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.028Z) ## 矩阵 DP(D) -- [矩阵 DP · DP大师](https://dp.round1.cc/part/d): 矩阵 DP学习路径以“两条主线:网格坐标上的 DP,与矩阵快速幂加速的递推。”为主线,串联 2 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-23T21:18:04+08:00) -- [网格 / 矩阵上的 DP · 矩阵 DP · DP大师](https://dp.round1.cc/part/d/grid): 网格 / 矩阵上的 DP课程回答“网格路径、最大正方形和双路径如何选择状态维度”。内容以路径·最大正方形·双线程为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [矩阵快速幂加速 · 矩阵 DP · DP大师](https://dp.round1.cc/part/d/matpow): 矩阵快速幂加速课程回答“线性递推怎样写成矩阵并用快速幂加速”。内容以递推→矩阵幂·O(k³log n)为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) +- [矩阵 DP · DP大师](https://dp.round1.cc/part/d): 矩阵 DP学习路径以“两条主线:网格坐标上的 DP,与矩阵快速幂加速的递推。”为主线,串联 2 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-27T05:20:51.219Z) +- [网格 / 矩阵上的 DP · 矩阵 DP · DP大师](https://dp.round1.cc/part/d/grid): 网格 / 矩阵上的 DP课程回答“网格路径、最大正方形和双路径如何选择状态维度”。内容以路径·最大正方形·双线程为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.023Z) +- [矩阵快速幂加速 · 矩阵 DP · DP大师](https://dp.round1.cc/part/d/matpow): 矩阵快速幂加速课程回答“线性递推怎样写成矩阵并用快速幂加速”。内容以递推→矩阵幂·O(k³log n)为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.038Z) ## 换根 DP(E) -- [换根 DP · DP大师](https://dp.round1.cc/part/e): 换根 DP学习路径以“二次扫描:固定根一遍 DFS,再一遍换根 O(1) 推每个点。”为主线,串联 4 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-23T21:18:04+08:00) -- [换根基础模型 · 换根 DP · DP大师](https://dp.round1.cc/part/e/basic): 换根基础模型课程回答“一次定根结果如何在线性时间转移到所有根”。内容以二次扫描骨架为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [距离和换根 · 换根 DP · DP大师](https://dp.round1.cc/part/e/distsum): 距离和换根课程回答“换根时全树距离和为什么只需常数时间更新”。内容以深度和·带权距离和为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [子树内外合并 · 换根 DP · DP大师](https://dp.round1.cc/part/e/inout): 子树内外合并课程回答“子树内外贡献如何在第二遍 DFS 中合并”。内容以距离≤k 点权和为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [中心 / 偏心距 · 换根 DP · DP大师](https://dp.round1.cc/part/e/center): 中心 / 偏心距课程回答“偏心距与树中心如何由向下和向上信息共同得到”。内容以树的直径·核为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) +- [换根 DP · DP大师](https://dp.round1.cc/part/e): 换根 DP学习路径以“二次扫描:固定根一遍 DFS,再一遍换根 O(1) 推每个点。”为主线,串联 4 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-27T05:20:51.219Z) +- [换根基础模型 · 换根 DP · DP大师](https://dp.round1.cc/part/e/basic): 换根基础模型课程回答“一次定根结果如何在线性时间转移到所有根”。内容以二次扫描骨架为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.039Z) +- [距离和换根 · 换根 DP · DP大师](https://dp.round1.cc/part/e/distsum): 距离和换根课程回答“换根时全树距离和为什么只需常数时间更新”。内容以深度和·带权距离和为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.039Z) +- [子树内外合并 · 换根 DP · DP大师](https://dp.round1.cc/part/e/inout): 子树内外合并课程回答“子树内外贡献如何在第二遍 DFS 中合并”。内容以距离≤k 点权和为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:20:51.219Z) +- [中心 / 偏心距 · 换根 DP · DP大师](https://dp.round1.cc/part/e/center): 中心 / 偏心距课程回答“偏心距与树中心如何由向下和向上信息共同得到”。内容以树的直径·核为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:20:51.219Z) ## 树形 DP(F) -- [树形 DP · DP大师](https://dp.round1.cc/part/f): 树形 DP学习路径以“dp[u][…] 表示子树最优,后序遍历自底向上合并。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-23T21:18:04+08:00) -- [选点 / 最大独立集 · 树形 DP · DP大师](https://dp.round1.cc/part/f/select): 选点 / 最大独立集课程回答“父子不能同时选择时,选与不选状态如何配合”。内容以没有上司的舞会为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [树上背包 · 树形 DP · DP大师](https://dp.round1.cc/part/f/knapsack): 树上背包课程回答“树上选取数量约束如何在子树间做背包合并”。内容以二叉苹果树·选课为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [直径 / 重心 DP · 树形 DP · DP大师](https://dp.round1.cc/part/f/diameter): 直径 / 重心 DP课程回答“过当前节点的多条链如何组合出直径与重心信息”。内容以过点最长链为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [覆盖 / 支配 / 染色 · 树形 DP · DP大师](https://dp.round1.cc/part/f/cover): 覆盖 / 支配 / 染色课程回答“覆盖、支配和染色约束需要哪些互斥状态”。内容以三状态·染色计数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [方案数 / 距离统计 · 树形 DP · DP大师](https://dp.round1.cc/part/f/count): 方案数 / 距离统计课程回答“树上方案数与距离统计如何在合并时避免重复”。内容以联合权值·括号树为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) +- [树形 DP · DP大师](https://dp.round1.cc/part/f): 树形 DP学习路径以“dp[u][…] 表示子树最优,后序遍历自底向上合并。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-27T05:20:51.219Z) +- [选点 / 最大独立集 · 树形 DP · DP大师](https://dp.round1.cc/part/f/select): 选点 / 最大独立集课程回答“父子不能同时选择时,选与不选状态如何配合”。内容以没有上司的舞会为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.041Z) +- [树上背包 · 树形 DP · DP大师](https://dp.round1.cc/part/f/knapsack): 树上背包课程回答“树上选取数量约束如何在子树间做背包合并”。内容以二叉苹果树·选课为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.042Z) +- [直径 / 重心 DP · 树形 DP · DP大师](https://dp.round1.cc/part/f/diameter): 直径 / 重心 DP课程回答“过当前节点的多条链如何组合出直径与重心信息”。内容以过点最长链为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.041Z) +- [覆盖 / 支配 / 染色 · 树形 DP · DP大师](https://dp.round1.cc/part/f/cover): 覆盖 / 支配 / 染色课程回答“覆盖、支配和染色约束需要哪些互斥状态”。内容以三状态·染色计数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.040Z) +- [方案数 / 距离统计 · 树形 DP · DP大师](https://dp.round1.cc/part/f/count): 方案数 / 距离统计课程回答“树上方案数与距离统计如何在合并时避免重复”。内容以联合权值·括号树为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.042Z) ## 状压 DP(G) -- [状压 DP · DP大师](https://dp.round1.cc/part/g): 状压 DP学习路径以“状态是一个集合,用二进制整数表示;转移在 mask 间进行。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-23T21:18:04+08:00) -- [棋盘 / 轮廓状压 · 状压 DP · DP大师](https://dp.round1.cc/part/g/board): 棋盘 / 轮廓状压课程回答“逐行棋盘约束怎样编码为兼容位掩码”。内容以互不侵犯·炮兵阵地为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [集合状压 / TSP · 状压 DP · DP大师](https://dp.round1.cc/part/g/tsp): 集合状压 / TSP课程回答“集合访问状态如何保证 Hamilton 路径不重不漏”。内容以最短 Hamilton·吃奶酪为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [状压 + 覆盖 · 状压 DP · DP大师](https://dp.round1.cc/part/g/cover): 状压 + 覆盖课程回答“几何覆盖选择怎样预处理成可转移的状态集合”。内容以愤怒的小鸟·宝藏为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [综合技巧 · 状压 DP · DP大师](https://dp.round1.cc/part/g/subset): 综合技巧课程回答“子集枚举与计数变形有哪些可复用的位运算技巧”。内容以枚举子集·计数变形为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) -- [插头 DP · 状压 DP · DP大师](https://dp.round1.cc/part/g/plug): 插头 DP课程回答“轮廓线上的连通性怎样压缩为插头状态”。内容以轮廓线连通性为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-23T21:18:04+08:00) +- [状压 DP · DP大师](https://dp.round1.cc/part/g): 状压 DP学习路径以“状态是一个集合,用二进制整数表示;转移在 mask 间进行。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。(最近更新:2026-08-27T05:20:51.219Z) +- [棋盘 / 轮廓状压 · 状压 DP · DP大师](https://dp.round1.cc/part/g/board): 棋盘 / 轮廓状压课程回答“逐行棋盘约束怎样编码为兼容位掩码”。内容以互不侵犯·炮兵阵地为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.016Z) +- [集合状压 / TSP · 状压 DP · DP大师](https://dp.round1.cc/part/g/tsp): 集合状压 / TSP课程回答“集合访问状态如何保证 Hamilton 路径不重不漏”。内容以最短 Hamilton·吃奶酪为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.017Z) +- [状压 + 覆盖 · 状压 DP · DP大师](https://dp.round1.cc/part/g/cover): 状压 + 覆盖课程回答“几何覆盖选择怎样预处理成可转移的状态集合”。内容以愤怒的小鸟·宝藏为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.016Z) +- [综合技巧 · 状压 DP · DP大师](https://dp.round1.cc/part/g/subset): 综合技巧课程回答“子集枚举与计数变形有哪些可复用的位运算技巧”。内容以枚举子集·计数变形为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:21:25.017Z) +- [插头 DP · 状压 DP · DP大师](https://dp.round1.cc/part/g/plug): 插头 DP课程回答“轮廓线上的连通性怎样压缩为插头状态”。内容以轮廓线连通性为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。(最近更新:2026-08-27T05:20:51.219Z) ## 使用说明 diff --git a/site/public/route-summaries.json b/site/public/route-summaries.json index b783459..e8926a0 100644 --- a/site/public/route-summaries.json +++ b/site/public/route-summaries.json @@ -9,7 +9,7 @@ "title": "DP大师 · DP Master", "summary": "DP大师面向算法学习者,用精讲、逐帧可视化、题目索引和小游戏讲清状态定义、转移顺序与模型迁移。", "type": "home", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/a", @@ -17,7 +17,7 @@ "title": "背包 DP · DP大师", "summary": "背包 DP学习路径以“容量受限下的取舍:物品件数属性决定了背包的谱系。”为主线,串联 9 门课程的状态模型、转移顺序、可视化验证与配套题目。", "type": "family", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/b", @@ -25,7 +25,7 @@ "title": "线性 DP · DP大师", "summary": "线性 DP学习路径以“把问题排成一条推进的序列,dp[i] 只依赖更早的状态。”为主线,串联 7 门课程的状态模型、转移顺序、可视化验证与配套题目。", "type": "family", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/c", @@ -33,7 +33,7 @@ "title": "区间 DP · DP大师", "summary": "区间 DP学习路径以“dp[l][r] 表示区间最优,枚举分割/合并点,按长度递推。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。", "type": "family", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/d", @@ -41,7 +41,7 @@ "title": "矩阵 DP · DP大师", "summary": "矩阵 DP学习路径以“两条主线:网格坐标上的 DP,与矩阵快速幂加速的递推。”为主线,串联 2 门课程的状态模型、转移顺序、可视化验证与配套题目。", "type": "family", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/e", @@ -49,7 +49,7 @@ "title": "换根 DP · DP大师", "summary": "换根 DP学习路径以“二次扫描:固定根一遍 DFS,再一遍换根 O(1) 推每个点。”为主线,串联 4 门课程的状态模型、转移顺序、可视化验证与配套题目。", "type": "family", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/f", @@ -57,7 +57,7 @@ "title": "树形 DP · DP大师", "summary": "树形 DP学习路径以“dp[u][…] 表示子树最优,后序遍历自底向上合并。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。", "type": "family", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/g", @@ -65,7 +65,7 @@ "title": "状压 DP · DP大师", "summary": "状压 DP学习路径以“状态是一个集合,用二进制整数表示;转移在 mask 间进行。”为主线,串联 5 门课程的状态模型、转移顺序、可视化验证与配套题目。", "type": "family", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/part/a/01", @@ -73,7 +73,7 @@ "title": "01 背包 · 背包 DP · DP大师", "summary": "01 背包课程回答“每件物品只能取一次时,为什么容量必须逆序更新”。内容以取或不取·一维逆推·恰好装满为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.030Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -83,7 +83,7 @@ "title": "完全背包 · 背包 DP · DP大师", "summary": "完全背包课程回答“物品可无限取用时,正序更新如何复用本轮状态”。内容以无限件·一维正推为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.030Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -93,7 +93,7 @@ "title": "多重背包 · 背包 DP · DP大师", "summary": "多重背包课程回答“有限件物品怎样从朴素枚举优化到二进制或单调队列”。内容以朴素·二进制·单调队列为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.033Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -103,7 +103,7 @@ "title": "分组背包 · 背包 DP · DP大师", "summary": "分组背包课程回答“每组至多选一件时,如何隔离组内选择”。内容以每组至多选一件为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.032Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -113,7 +113,7 @@ "title": "混合背包 · 背包 DP · DP大师", "summary": "混合背包课程回答“01、完全和多重物品怎样共用一套转移框架”。内容以01/完全/多重同题为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.032Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -123,7 +123,7 @@ "title": "二维费用背包 · 背包 DP · DP大师", "summary": "二维费用背包课程回答“同时受两种容量约束时,状态维度与枚举顺序如何设计”。内容以两种费用同时受限为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.030Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -133,7 +133,7 @@ "title": "有依赖的背包 · 背包 DP · DP大师", "summary": "有依赖的背包课程回答“带主件附件依赖的选择怎样转化为合法组合”。内容以主件-附件·依赖→分组为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.031Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -143,7 +143,7 @@ "title": "背包综合变形 · 背包 DP · DP大师", "summary": "背包综合变形课程回答“背包模型如何扩展到计数、撤销和方案恢复”。内容以方案数·撤销·具体方案为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.034Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -153,7 +153,7 @@ "title": "辨析:分数背包=贪心 · 背包 DP · DP大师", "summary": "辨析:分数背包=贪心课程回答“为什么可分割物品属于贪心而不是 01 背包”。内容以可分割⇒贪心 vs 整取⇒DP为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.031Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -163,7 +163,7 @@ "title": "路径型 / 递推入门 · 线性 DP · DP大师", "summary": "路径型 / 递推入门课程回答“沿序列或网格推进时,如何定义最小充分状态”。内容以数字三角形·过河卒·方格取数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.022Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -173,7 +173,7 @@ "title": "最大子段和 · 线性 DP · DP大师", "summary": "最大子段和课程回答“如何用一个局部状态维护最大连续子段”。内容以Kadane·环形·两段不相交为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.035Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -183,7 +183,7 @@ "title": "最长上升子序列 LIS · 线性 DP · DP大师", "summary": "最长上升子序列 LIS课程回答“最长上升子序列如何从二次转移优化到对数查找”。内容以O(n²) 与 O(n log n)·导弹拦截为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.037Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -193,7 +193,7 @@ "title": "最长公共子序列 LCS · 线性 DP · DP大师", "summary": "最长公共子序列 LCS课程回答“两个序列的公共结构如何通过二维状态刻画”。内容以排列 LCS→LIS·计数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.021Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -203,7 +203,7 @@ "title": "编辑距离 · 线性 DP · DP大师", "summary": "编辑距离课程回答“插入、删除和替换如何统一进编辑距离转移”。内容以删/插/改三向转移为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.020Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -213,7 +213,7 @@ "title": "线性状态机 DP · 线性 DP · DP大师", "summary": "线性状态机 DP课程回答“带持有或选择限制的问题怎样画成有限状态机”。内容以受限选取·股票买卖为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.019Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -223,7 +223,7 @@ "title": "计数 / 划分型 · 线性 DP · DP大师", "summary": "计数 / 划分型课程回答“计数与划分问题如何避免重复或遗漏方案”。内容以方案数·高精度·整数划分为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.036Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -233,7 +233,7 @@ "title": "石子合并(链形) · 区间 DP · DP大师", "summary": "石子合并(链形)课程回答“区间合并代价为何要按长度递增计算”。内容以区间合并基础模型为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.027Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -243,7 +243,7 @@ "title": "环形区间 DP · 区间 DP · DP大师", "summary": "环形区间 DP课程回答“环形区间怎样通过复制序列转化为链形区间”。内容以断环为链·能量项链为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.026Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -253,7 +253,7 @@ "title": "回文 / 括号 · 区间 DP · DP大师", "summary": "回文 / 括号课程回答“端点匹配如何组织回文与括号类转移”。内容以收缩扩展·端点匹配为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.025Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -263,7 +263,7 @@ "title": "加分二叉树型 · 区间 DP · DP大师", "summary": "加分二叉树型课程回答“枚举区间根节点时,子区间如何对应左右子树”。内容以枚举根·区间即子树为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.026Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -273,7 +273,7 @@ "title": "合并 / 删除类 · 区间 DP · DP大师", "summary": "合并 / 删除类课程回答“合并与删除过程怎样压缩成区间状态”。内容以2048·区间删除代价为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.028Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -283,7 +283,7 @@ "title": "网格 / 矩阵上的 DP · 矩阵 DP · DP大师", "summary": "网格 / 矩阵上的 DP课程回答“网格路径、最大正方形和双路径如何选择状态维度”。内容以路径·最大正方形·双线程为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.023Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -293,7 +293,7 @@ "title": "矩阵快速幂加速 · 矩阵 DP · DP大师", "summary": "矩阵快速幂加速课程回答“线性递推怎样写成矩阵并用快速幂加速”。内容以递推→矩阵幂·O(k³log n)为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.038Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -303,7 +303,7 @@ "title": "换根基础模型 · 换根 DP · DP大师", "summary": "换根基础模型课程回答“一次定根结果如何在线性时间转移到所有根”。内容以二次扫描骨架为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.039Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -313,7 +313,7 @@ "title": "距离和换根 · 换根 DP · DP大师", "summary": "距离和换根课程回答“换根时全树距离和为什么只需常数时间更新”。内容以深度和·带权距离和为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.039Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -323,7 +323,7 @@ "title": "子树内外合并 · 换根 DP · DP大师", "summary": "子树内外合并课程回答“子树内外贡献如何在第二遍 DFS 中合并”。内容以距离≤k 点权和为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:20:51.219Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -333,7 +333,7 @@ "title": "中心 / 偏心距 · 换根 DP · DP大师", "summary": "中心 / 偏心距课程回答“偏心距与树中心如何由向下和向上信息共同得到”。内容以树的直径·核为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:20:51.219Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -343,7 +343,7 @@ "title": "选点 / 最大独立集 · 树形 DP · DP大师", "summary": "选点 / 最大独立集课程回答“父子不能同时选择时,选与不选状态如何配合”。内容以没有上司的舞会为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.041Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -353,7 +353,7 @@ "title": "树上背包 · 树形 DP · DP大师", "summary": "树上背包课程回答“树上选取数量约束如何在子树间做背包合并”。内容以二叉苹果树·选课为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.042Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -363,7 +363,7 @@ "title": "直径 / 重心 DP · 树形 DP · DP大师", "summary": "直径 / 重心 DP课程回答“过当前节点的多条链如何组合出直径与重心信息”。内容以过点最长链为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.041Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -373,7 +373,7 @@ "title": "覆盖 / 支配 / 染色 · 树形 DP · DP大师", "summary": "覆盖 / 支配 / 染色课程回答“覆盖、支配和染色约束需要哪些互斥状态”。内容以三状态·染色计数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.040Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -383,7 +383,7 @@ "title": "方案数 / 距离统计 · 树形 DP · DP大师", "summary": "方案数 / 距离统计课程回答“树上方案数与距离统计如何在合并时避免重复”。内容以联合权值·括号树为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.042Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -393,7 +393,7 @@ "title": "棋盘 / 轮廓状压 · 状压 DP · DP大师", "summary": "棋盘 / 轮廓状压课程回答“逐行棋盘约束怎样编码为兼容位掩码”。内容以互不侵犯·炮兵阵地为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.016Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -403,7 +403,7 @@ "title": "集合状压 / TSP · 状压 DP · DP大师", "summary": "集合状压 / TSP课程回答“集合访问状态如何保证 Hamilton 路径不重不漏”。内容以最短 Hamilton·吃奶酪为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.017Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -413,7 +413,7 @@ "title": "状压 + 覆盖 · 状压 DP · DP大师", "summary": "状压 + 覆盖课程回答“几何覆盖选择怎样预处理成可转移的状态集合”。内容以愤怒的小鸟·宝藏为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.016Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -423,7 +423,7 @@ "title": "综合技巧 · 状压 DP · DP大师", "summary": "综合技巧课程回答“子集枚举与计数变形有哪些可复用的位运算技巧”。内容以枚举子集·计数变形为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:21:25.017Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -433,7 +433,7 @@ "title": "插头 DP · 状压 DP · DP大师", "summary": "插头 DP课程回答“轮廓线上的连通性怎样压缩为插头状态”。内容以轮廓线连通性为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。", "type": "lesson", - "lastModified": "2026-08-23T21:18:04+08:00", + "lastModified": "2026-08-27T05:20:51.219Z", "reviewedBy": "AzureL蔚澜算法", "reviewStatus": "持续复核" }, @@ -443,7 +443,7 @@ "title": "通用方法论 · DP大师", "summary": "用状态设计、转移方程、计算顺序、空间优化和调试清单,建立可复用的动态规划解题方法。", "type": "static", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" }, { "path": "/problems", @@ -451,7 +451,7 @@ "title": "题目索引 · DP大师", "summary": "按 DP 家族、课程、难度和关键词检索教程中的例题与练习,快速定位对应的洛谷题目和学习路径。", "type": "static", - "lastModified": "2026-08-23T21:18:04+08:00" + "lastModified": "2026-08-27T05:20:51.219Z" } ] } diff --git a/site/public/sitemap.xml b/site/public/sitemap.xml index 50c2e6f..d428c58 100644 --- a/site/public/sitemap.xml +++ b/site/public/sitemap.xml @@ -2,190 +2,190 @@ https://dp.round1.cc/ - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/method - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/a - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/a/01 - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.030Z https://dp.round1.cc/part/a/complete - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.030Z https://dp.round1.cc/part/a/cost2d - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.030Z https://dp.round1.cc/part/a/dep - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.031Z https://dp.round1.cc/part/a/fractional - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.031Z https://dp.round1.cc/part/a/group - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.032Z https://dp.round1.cc/part/a/mixed - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.032Z https://dp.round1.cc/part/a/multiple - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.033Z https://dp.round1.cc/part/a/variant - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.034Z https://dp.round1.cc/part/b - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/b/count - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.036Z https://dp.round1.cc/part/b/edit - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.020Z https://dp.round1.cc/part/b/fsm - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.019Z https://dp.round1.cc/part/b/lcs - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.021Z https://dp.round1.cc/part/b/lis - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.037Z https://dp.round1.cc/part/b/maxseg - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.035Z https://dp.round1.cc/part/b/path - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.022Z https://dp.round1.cc/part/c - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/c/merge - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.028Z https://dp.round1.cc/part/c/palindrome - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.025Z https://dp.round1.cc/part/c/ring - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.026Z https://dp.round1.cc/part/c/stone - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.027Z https://dp.round1.cc/part/c/tree - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.026Z https://dp.round1.cc/part/d - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/d/grid - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.023Z https://dp.round1.cc/part/d/matpow - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.038Z https://dp.round1.cc/part/e - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/e/basic - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.039Z https://dp.round1.cc/part/e/center - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/e/distsum - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.039Z https://dp.round1.cc/part/e/inout - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/f - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/f/count - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.042Z https://dp.round1.cc/part/f/cover - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.040Z https://dp.round1.cc/part/f/diameter - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.041Z https://dp.round1.cc/part/f/knapsack - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.042Z https://dp.round1.cc/part/f/select - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.041Z https://dp.round1.cc/part/g - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/g/board - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.016Z https://dp.round1.cc/part/g/cover - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.016Z https://dp.round1.cc/part/g/plug - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z https://dp.round1.cc/part/g/subset - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.017Z https://dp.round1.cc/part/g/tsp - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:21:25.017Z https://dp.round1.cc/problems - 2026-08-23T21:18:04+08:00 + 2026-08-27T05:20:51.219Z diff --git a/site/src/components/demos/bitmask/BoardDemo.tsx b/site/src/components/demos/bitmask/BoardDemo.tsx index d8b4348..0afa5e5 100644 --- a/site/src/components/demos/bitmask/BoardDemo.tsx +++ b/site/src/components/demos/bitmask/BoardDemo.tsx @@ -55,11 +55,11 @@ export default function BoardDemo() {
棋盘边长 N
- {N} -
@@ -67,11 +67,11 @@ export default function BoardDemo() {
放置王数 K
- {K} -
@@ -148,7 +148,7 @@ export default function BoardDemo() { />
- {showCount && total != null && ( diff --git a/site/src/components/demos/bitmask/CoverDemo.tsx b/site/src/components/demos/bitmask/CoverDemo.tsx index c4e5fe9..59ada74 100644 --- a/site/src/components/demos/bitmask/CoverDemo.tsx +++ b/site/src/components/demos/bitmask/CoverDemo.tsx @@ -81,7 +81,7 @@ export default function CoverDemo() { {Array.from({ length: N }, (_, el) => { const on = ((c.cover >> el) & 1) === 1 return ( -
代价 - {c.cost} -
))}
- diff --git a/site/src/components/demos/bitmask/SubsetEnumDemo.tsx b/site/src/components/demos/bitmask/SubsetEnumDemo.tsx index 2a1828c..8e253f0 100644 --- a/site/src/components/demos/bitmask/SubsetEnumDemo.tsx +++ b/site/src/components/demos/bitmask/SubsetEnumDemo.tsx @@ -46,7 +46,7 @@ export default function SubsetEnumDemo() { {Array.from({ length: N }, (_, i) => { const on = ((S >> i) & 1) === 1 return ( - +
- + {p.x},{p.y} - +
- + ))}
点数 {n} - - -
diff --git a/site/src/components/demos/fsm/StateMachineDemo.tsx b/site/src/components/demos/fsm/StateMachineDemo.tsx index c11356f..41c0052 100644 --- a/site/src/components/demos/fsm/StateMachineDemo.tsx +++ b/site/src/components/demos/fsm/StateMachineDemo.tsx @@ -33,18 +33,18 @@ function NumStepper({ return (
{removable && ( - )}
a 值
- {value} -
@@ -75,7 +75,7 @@ export default function StateMachineDemo() {
{PRESETS.map((p) => ( - ))} - @@ -105,7 +105,7 @@ export default function StateMachineDemo() { /> ))} {a.length < 9 && ( - )} diff --git a/site/src/components/demos/fsm/StockStateDemo.tsx b/site/src/components/demos/fsm/StockStateDemo.tsx index ab3d099..e0d4e6d 100644 --- a/site/src/components/demos/fsm/StockStateDemo.tsx +++ b/site/src/components/demos/fsm/StockStateDemo.tsx @@ -55,7 +55,7 @@ export default function StockStateDemo() { {/* 预设 + 冷却开关 */}
{PRESETS.map((pr) => ( - )}
第 {i + 1} 天
- {v} -
))} {prices.length < 9 && ( - )} @@ -185,13 +185,13 @@ export default function StockStateDemo() {
- - - ))} - )}
- )} @@ -122,7 +122,7 @@ export default function LCSDemo() {
{PRESETS.map((p) => ( - {value} -
@@ -82,7 +82,7 @@ export default function MaxSquareDemo() { {shown.map((row, i) => (
{row.map((val, j) => ( - {value} -
@@ -95,7 +95,7 @@ export default function PathGridCountDemo() { const blk = blocked.has(k) const se = isStartOrEnd(i, j) return ( - {value} -
@@ -94,7 +94,7 @@ export default function PathTriangleDemo() { border: '1px solid var(--border-strong)', }} > - {value} -
@@ -91,7 +91,7 @@ export default function TwoPathDemo() { border: '1px solid var(--border-strong)', }} > - {value} -
@@ -58,7 +58,7 @@ export default function MergeIntervalDemo() {
{i} {nums.length > 3 && ( - )} @@ -66,7 +66,7 @@ export default function MergeIntervalDemo() {
))} {nums.length < 6 && ( - )} diff --git a/site/src/components/demos/interval/PalindromeDemo.tsx b/site/src/components/demos/interval/PalindromeDemo.tsx index 5d6a2f3..a3e9cb6 100644 --- a/site/src/components/demos/interval/PalindromeDemo.tsx +++ b/site/src/components/demos/interval/PalindromeDemo.tsx @@ -34,13 +34,13 @@ export default function PalindromeDemo() { onChange={(e) => setText(e.target.value)} aria-label="输入字符串" /> -
{PRESETS.map((p) => ( -
{PRESETS.map((p) => ( - {value} -
@@ -61,7 +61,7 @@ export default function RingIntervalDemo() {
{i} {stones.length > 3 && ( - )} @@ -69,7 +69,7 @@ export default function RingIntervalDemo() {
))} {stones.length < 4 && ( - )} diff --git a/site/src/components/demos/interval/ScoreTreeBuildDemo.tsx b/site/src/components/demos/interval/ScoreTreeBuildDemo.tsx index ee01a61..515192e 100644 --- a/site/src/components/demos/interval/ScoreTreeBuildDemo.tsx +++ b/site/src/components/demos/interval/ScoreTreeBuildDemo.tsx @@ -23,11 +23,11 @@ function Stepper({
{label}
- {value} -
@@ -105,7 +105,7 @@ export default function ScoreTreeBuildDemo() {
{i + 1} {scores.length > 3 && ( - )} @@ -113,7 +113,7 @@ export default function ScoreTreeBuildDemo() {
))} {scores.length < 5 && ( - )} diff --git a/site/src/components/demos/interval/ScoreTreeDemo.tsx b/site/src/components/demos/interval/ScoreTreeDemo.tsx index a14b363..d0cb88c 100644 --- a/site/src/components/demos/interval/ScoreTreeDemo.tsx +++ b/site/src/components/demos/interval/ScoreTreeDemo.tsx @@ -23,11 +23,11 @@ function Stepper({
{label}
- {value} -
@@ -63,7 +63,7 @@ export default function ScoreTreeDemo() {
{i + 1} {scores.length > 3 && ( - )} @@ -71,7 +71,7 @@ export default function ScoreTreeDemo() {
))} {scores.length < 5 && ( - )} diff --git a/site/src/components/demos/interval/StoneMergeDemo.tsx b/site/src/components/demos/interval/StoneMergeDemo.tsx index 121a263..9f9e980 100644 --- a/site/src/components/demos/interval/StoneMergeDemo.tsx +++ b/site/src/components/demos/interval/StoneMergeDemo.tsx @@ -23,11 +23,11 @@ function Stepper({
{label}
- {value} -
@@ -59,7 +59,7 @@ export default function StoneMergeDemo() {
{i} {stones.length > 3 && ( - )} @@ -67,7 +67,7 @@ export default function StoneMergeDemo() {
))} {stones.length < 5 && ( - )} diff --git a/site/src/components/demos/interval/StoneMinMaxDemo.tsx b/site/src/components/demos/interval/StoneMinMaxDemo.tsx index a6e879d..70e867d 100644 --- a/site/src/components/demos/interval/StoneMinMaxDemo.tsx +++ b/site/src/components/demos/interval/StoneMinMaxDemo.tsx @@ -22,11 +22,11 @@ function Stepper({
{label}
- {value} -
@@ -60,7 +60,7 @@ export default function StoneMinMaxDemo() {
{i} {stones.length > 3 && ( - )} @@ -68,7 +68,7 @@ export default function StoneMinMaxDemo() {
))} {stones.length < 5 && ( - )} diff --git a/site/src/components/demos/interval/TwoFourEightDemo.tsx b/site/src/components/demos/interval/TwoFourEightDemo.tsx index c708e7b..1d06f2d 100644 --- a/site/src/components/demos/interval/TwoFourEightDemo.tsx +++ b/site/src/components/demos/interval/TwoFourEightDemo.tsx @@ -22,11 +22,11 @@ function Stepper({
{label}
- {value} -
@@ -57,7 +57,7 @@ export default function TwoFourEightDemo() {
{i} {nums.length > 3 && ( - )} @@ -65,7 +65,7 @@ export default function TwoFourEightDemo() {
))} {nums.length < 6 && ( - )} diff --git a/site/src/components/demos/knapsack/CompleteContrastDemo.tsx b/site/src/components/demos/knapsack/CompleteContrastDemo.tsx index cb2e4ac..6902849 100644 --- a/site/src/components/demos/knapsack/CompleteContrastDemo.tsx +++ b/site/src/components/demos/knapsack/CompleteContrastDemo.tsx @@ -23,11 +23,11 @@ function Stepper({
{label}
- {value} -
diff --git a/site/src/components/demos/knapsack/ForwardBugDemo.tsx b/site/src/components/demos/knapsack/ForwardBugDemo.tsx index 63b0e43..3c9a139 100644 --- a/site/src/components/demos/knapsack/ForwardBugDemo.tsx +++ b/site/src/components/demos/knapsack/ForwardBugDemo.tsx @@ -22,11 +22,11 @@ function Stepper({
{label}
- {value} -
diff --git a/site/src/components/demos/knapsack/GroupOrderContrastDemo.tsx b/site/src/components/demos/knapsack/GroupOrderContrastDemo.tsx index e592cb3..12a8775 100644 --- a/site/src/components/demos/knapsack/GroupOrderContrastDemo.tsx +++ b/site/src/components/demos/knapsack/GroupOrderContrastDemo.tsx @@ -24,11 +24,11 @@ function Stepper({
{label}
- {value} -
@@ -106,7 +106,7 @@ export default function GroupOrderContrastDemo() { 组 {gi + 1}
{groups.length > 1 && ( - )} @@ -129,7 +129,7 @@ export default function GroupOrderContrastDemo() {
))} {grp.length < 3 && ( - )} @@ -137,7 +137,7 @@ export default function GroupOrderContrastDemo() {
))} {groups.length < 3 && ( - )} diff --git a/site/src/components/demos/knapsack/KnapsackCost2DDemo.tsx b/site/src/components/demos/knapsack/KnapsackCost2DDemo.tsx index 50dc713..2b76e07 100644 --- a/site/src/components/demos/knapsack/KnapsackCost2DDemo.tsx +++ b/site/src/components/demos/knapsack/KnapsackCost2DDemo.tsx @@ -29,11 +29,11 @@ function Stepper({
{label}
- {value} -
@@ -75,7 +75,7 @@ export default function KnapsackCost2DDemo() {
{idx + 1} {items.length > 1 && ( - )} @@ -94,7 +94,7 @@ export default function KnapsackCost2DDemo() {
))} {items.length < 3 && ( - )} @@ -112,7 +112,7 @@ export default function KnapsackCost2DDemo() {
{MODES.map((m) => ( - )} @@ -135,7 +135,7 @@ export default function KnapsackDemo({ variant = '01' }: { variant?: '01' | 'com
))} {items.length < 8 && ( - )} @@ -150,7 +150,7 @@ export default function KnapsackDemo({ variant = '01' }: { variant?: '01' | 'com {variant === '01' && (
{MODES_01.map((m) => ( - {value} -
diff --git a/site/src/components/demos/knapsack/KnapsackFractionalDemo.tsx b/site/src/components/demos/knapsack/KnapsackFractionalDemo.tsx index f042813..651a811 100644 --- a/site/src/components/demos/knapsack/KnapsackFractionalDemo.tsx +++ b/site/src/components/demos/knapsack/KnapsackFractionalDemo.tsx @@ -26,11 +26,11 @@ function Stepper({
{label}
- {value} -
@@ -125,7 +125,7 @@ export default function KnapsackFractionalDemo() {
{i + 1} {items.length > 1 && ( - )} @@ -135,7 +135,7 @@ export default function KnapsackFractionalDemo() {
))} {items.length < 5 && ( - )} diff --git a/site/src/components/demos/knapsack/KnapsackGroupDemo.tsx b/site/src/components/demos/knapsack/KnapsackGroupDemo.tsx index 9414792..be58b56 100644 --- a/site/src/components/demos/knapsack/KnapsackGroupDemo.tsx +++ b/site/src/components/demos/knapsack/KnapsackGroupDemo.tsx @@ -24,11 +24,11 @@ function Stepper({
{label}
- {value} -
@@ -97,7 +97,7 @@ export default function KnapsackGroupDemo() { 组 {gi + 1}
{groups.length > 1 && ( - )} @@ -120,7 +120,7 @@ export default function KnapsackGroupDemo() {
))} {grp.length < 3 && ( - )} @@ -128,7 +128,7 @@ export default function KnapsackGroupDemo() {
))} {groups.length < 3 && ( - )} diff --git a/site/src/components/demos/knapsack/KnapsackMixedDemo.tsx b/site/src/components/demos/knapsack/KnapsackMixedDemo.tsx index fc5414e..b6291d8 100644 --- a/site/src/components/demos/knapsack/KnapsackMixedDemo.tsx +++ b/site/src/components/demos/knapsack/KnapsackMixedDemo.tsx @@ -24,11 +24,11 @@ function Stepper({
{label}
- {value} -
@@ -72,13 +72,13 @@ export default function KnapsackMixedDemo() {
{i + 1} {items.length > 1 && ( - )}
{KINDS.map(({ k, label }) => ( - ))} @@ -93,7 +93,7 @@ export default function KnapsackMixedDemo() {
))} {items.length < 4 && ( - )} diff --git a/site/src/components/demos/knapsack/KnapsackMultipleDemo.tsx b/site/src/components/demos/knapsack/KnapsackMultipleDemo.tsx index 474f48f..7d19c8a 100644 --- a/site/src/components/demos/knapsack/KnapsackMultipleDemo.tsx +++ b/site/src/components/demos/knapsack/KnapsackMultipleDemo.tsx @@ -22,11 +22,11 @@ function Stepper({
{label}
- {value} -
@@ -60,7 +60,7 @@ export default function KnapsackMultipleDemo() {
{i + 1} {items.length > 1 && ( - )} @@ -70,7 +70,7 @@ export default function KnapsackMultipleDemo() {
))} {items.length < 4 && ( - )} diff --git a/site/src/components/demos/knapsack/KnapsackVariantDemo.tsx b/site/src/components/demos/knapsack/KnapsackVariantDemo.tsx index 58ae375..c515434 100644 --- a/site/src/components/demos/knapsack/KnapsackVariantDemo.tsx +++ b/site/src/components/demos/knapsack/KnapsackVariantDemo.tsx @@ -24,11 +24,11 @@ function Stepper({
{label}
- {value} -
@@ -63,7 +63,7 @@ export default function KnapsackVariantDemo() {
{i + 1} {items.length > 1 && ( -
))} {items.length < 5 && ( - )} diff --git a/site/src/components/demos/knapsack/MultipleSplitDemo.tsx b/site/src/components/demos/knapsack/MultipleSplitDemo.tsx index c884eeb..3465aea 100644 --- a/site/src/components/demos/knapsack/MultipleSplitDemo.tsx +++ b/site/src/components/demos/knapsack/MultipleSplitDemo.tsx @@ -22,11 +22,11 @@ function Stepper({
{label}
- {value} -
diff --git a/site/src/components/demos/knapsack/VariantUndoDemo.tsx b/site/src/components/demos/knapsack/VariantUndoDemo.tsx index 7d4d22e..5d26205 100644 --- a/site/src/components/demos/knapsack/VariantUndoDemo.tsx +++ b/site/src/components/demos/knapsack/VariantUndoDemo.tsx @@ -22,11 +22,11 @@ function Stepper({
{label}
- {value} -
@@ -78,7 +78,7 @@ export default function VariantUndoDemo() {
{i + 1} {items.length > 1 && ( - )} @@ -86,7 +86,7 @@ export default function VariantUndoDemo() {
))} {items.length < 5 && ( - )} @@ -102,7 +102,7 @@ export default function VariantUndoDemo() {
让第几件「消失」(对它做逆操作退掉)
{items.map((it, i) => ( - {value} -
@@ -67,7 +67,7 @@ export default function MaxSegRingDemo() {
{i} {a.length > 3 && ( - )} @@ -75,7 +75,7 @@ export default function MaxSegRingDemo() {
))} {a.length < 7 && ( - )} @@ -85,7 +85,7 @@ export default function MaxSegRingDemo() {
{PRESETS.map((p) => ( - {value} -
@@ -63,7 +63,7 @@ export default function MaxSubarrayDemo() {
{i} {a.length > 2 && ( - )} @@ -71,7 +71,7 @@ export default function MaxSubarrayDemo() {
))} {a.length < 8 && ( - )} @@ -81,7 +81,7 @@ export default function MaxSubarrayDemo() {
{PRESETS.map((p) => ( - ))} - diff --git a/site/src/components/demos/linear/PartitionDemo.tsx b/site/src/components/demos/linear/PartitionDemo.tsx index 5f970da..d877eab 100644 --- a/site/src/components/demos/linear/PartitionDemo.tsx +++ b/site/src/components/demos/linear/PartitionDemo.tsx @@ -22,11 +22,11 @@ function Stepper({
{label}
- {value} -
diff --git a/site/src/components/demos/linear/StairCountDemo.tsx b/site/src/components/demos/linear/StairCountDemo.tsx index 18e4d17..fc47a6c 100644 --- a/site/src/components/demos/linear/StairCountDemo.tsx +++ b/site/src/components/demos/linear/StairCountDemo.tsx @@ -24,11 +24,11 @@ function Stepper({
{label}
- {value} -
diff --git a/site/src/components/demos/lis/LISDemo.tsx b/site/src/components/demos/lis/LISDemo.tsx index 67b68a0..4ade7b9 100644 --- a/site/src/components/demos/lis/LISDemo.tsx +++ b/site/src/components/demos/lis/LISDemo.tsx @@ -32,18 +32,18 @@ function NumStepper({ return (
{removable && ( - )}
a 值
- {value} -
@@ -74,7 +74,7 @@ export default function LISDemo() {
{PRESETS.map((p) => ( - ))} - @@ -104,7 +104,7 @@ export default function LISDemo() { /> ))} {a.length < 10 && ( - )} diff --git a/site/src/components/demos/lis/LISPatienceDemo.tsx b/site/src/components/demos/lis/LISPatienceDemo.tsx index eef5e43..7d4f80d 100644 --- a/site/src/components/demos/lis/LISPatienceDemo.tsx +++ b/site/src/components/demos/lis/LISPatienceDemo.tsx @@ -72,7 +72,7 @@ export default function LISPatienceDemo() {
{PRESETS.map((p) => ( - ))} - {value} -
diff --git a/site/src/components/demos/reroot/RerootDistDemo.tsx b/site/src/components/demos/reroot/RerootDistDemo.tsx index fbd2951..e22896d 100644 --- a/site/src/components/demos/reroot/RerootDistDemo.tsx +++ b/site/src/components/demos/reroot/RerootDistDemo.tsx @@ -95,14 +95,14 @@ export default function RerootDistDemo() {
模式
- - {value} -
diff --git a/site/src/components/demos/treedp/DiameterDemo.tsx b/site/src/components/demos/treedp/DiameterDemo.tsx index fc804f8..4abfe32 100644 --- a/site/src/components/demos/treedp/DiameterDemo.tsx +++ b/site/src/components/demos/treedp/DiameterDemo.tsx @@ -22,11 +22,11 @@ function DStepper({ i, value, onChange }: { i: number; value: number; onChange:
点 {i + 1} · 点权
- {value} -
diff --git a/site/src/components/demos/treedp/IndepSetDemo.tsx b/site/src/components/demos/treedp/IndepSetDemo.tsx index 7bd877b..ad0bea4 100644 --- a/site/src/components/demos/treedp/IndepSetDemo.tsx +++ b/site/src/components/demos/treedp/IndepSetDemo.tsx @@ -24,11 +24,11 @@ function WStepper({ i, value, onChange }: { i: number; value: number; onChange:
{LABELS[i]} · 欢乐值
- {value} -
diff --git a/site/src/components/demos/treedp/JointWeightDemo.tsx b/site/src/components/demos/treedp/JointWeightDemo.tsx index e51b4f4..fd8e02c 100644 --- a/site/src/components/demos/treedp/JointWeightDemo.tsx +++ b/site/src/components/demos/treedp/JointWeightDemo.tsx @@ -74,11 +74,11 @@ export default function JointWeightDemo() {
点 {i + 1} · 权
- {v} -
diff --git a/site/src/components/demos/treedp/TreeKnapsackDemo.tsx b/site/src/components/demos/treedp/TreeKnapsackDemo.tsx index ba69513..77797de 100644 --- a/site/src/components/demos/treedp/TreeKnapsackDemo.tsx +++ b/site/src/components/demos/treedp/TreeKnapsackDemo.tsx @@ -73,11 +73,11 @@ export default function TreeKnapsackDemo() { 连 {tree.parent[i] + 1}–{i + 1} 的边
- {v} -
@@ -90,11 +90,11 @@ export default function TreeKnapsackDemo() {
保留边数 K
- {K} -
diff --git a/site/src/components/feedback/FeedbackWidget.tsx b/site/src/components/feedback/FeedbackWidget.tsx index e60b406..ece2464 100644 --- a/site/src/components/feedback/FeedbackWidget.tsx +++ b/site/src/components/feedback/FeedbackWidget.tsx @@ -329,6 +329,7 @@ export default function FeedbackWidget() { return ( <>
@@ -373,7 +374,7 @@ export default function FeedbackWidget() { 回执编号 {receiptId}

)} -
diff --git a/site/src/components/games/BitBoardGame.tsx b/site/src/components/games/BitBoardGame.tsx index 419d5ef..9c604fb 100644 --- a/site/src/components/games/BitBoardGame.tsx +++ b/site/src/components/games/BitBoardGame.tsx @@ -150,6 +150,7 @@ export default function BitBoardGame() {
{DIFF_ORDER.map((d) => ( ))}
-
@@ -229,10 +230,10 @@ export default function BitBoardGame() {
- -
diff --git a/site/src/components/games/LISChainGame.tsx b/site/src/components/games/LISChainGame.tsx index 26e46cc..e340cb3 100644 --- a/site/src/components/games/LISChainGame.tsx +++ b/site/src/components/games/LISChainGame.tsx @@ -160,6 +160,7 @@ export default function LISChainGame() {
{DIFF_ORDER.map((d) => (
)}
- -
-
diff --git a/site/src/components/games/PackMasterGame.tsx b/site/src/components/games/PackMasterGame.tsx index 57a0f51..5e93038 100644 --- a/site/src/components/games/PackMasterGame.tsx +++ b/site/src/components/games/PackMasterGame.tsx @@ -145,6 +145,7 @@ export default function PackMasterGame() {
{DIFF_ORDER.map((d) => (
)}
- -
diff --git a/site/src/components/games/PowerAccelGame.tsx b/site/src/components/games/PowerAccelGame.tsx index 824466b..a35af27 100644 --- a/site/src/components/games/PowerAccelGame.tsx +++ b/site/src/components/games/PowerAccelGame.tsx @@ -212,6 +212,7 @@ export default function PowerAccelGame() {
{DIFF_ORDER.map((d) => (
-
- -
diff --git a/site/src/components/games/RerootGame.tsx b/site/src/components/games/RerootGame.tsx index f44022f..0e1a8fc 100644 --- a/site/src/components/games/RerootGame.tsx +++ b/site/src/components/games/RerootGame.tsx @@ -138,6 +138,7 @@ export default function RerootGame() {
{DIFF_ORDER.map((d) => (
)}
- -
diff --git a/site/src/components/games/StoneMergeGame.tsx b/site/src/components/games/StoneMergeGame.tsx index 572d4c9..272b99f 100644 --- a/site/src/components/games/StoneMergeGame.tsx +++ b/site/src/components/games/StoneMergeGame.tsx @@ -212,6 +212,7 @@ export default function StoneMergeGame() {
{DIFF_ORDER.map((d) => (
)}
- -
- -
diff --git a/site/src/components/games/TreePartyGame.tsx b/site/src/components/games/TreePartyGame.tsx index eb198e9..661d00e 100644 --- a/site/src/components/games/TreePartyGame.tsx +++ b/site/src/components/games/TreePartyGame.tsx @@ -166,6 +166,7 @@ export default function TreePartyGame() {
{DIFF_ORDER.map((d) => (
)}
- -
diff --git a/site/src/components/layout/TopBar.tsx b/site/src/components/layout/TopBar.tsx index aaf3eb4..bbf9a1e 100644 --- a/site/src/components/layout/TopBar.tsx +++ b/site/src/components/layout/TopBar.tsx @@ -24,6 +24,7 @@ export default function TopBar({ return (
diff --git a/site/src/components/ui/CodeBlock.tsx b/site/src/components/ui/CodeBlock.tsx index 4b074fe..b2cfe31 100644 --- a/site/src/components/ui/CodeBlock.tsx +++ b/site/src/components/ui/CodeBlock.tsx @@ -90,7 +90,7 @@ export default function CodeBlock({ 在洛谷打开 {luogu} )} -
diff --git a/site/src/data/routeLastModified.ts b/site/src/data/routeLastModified.ts index c99c0ee..8d7d3e9 100644 --- a/site/src/data/routeLastModified.ts +++ b/site/src/data/routeLastModified.ts @@ -1,100 +1,100 @@ // 由 scripts/generate-seo.mjs 从源码时间证据生成,请勿手改。 export const ROUTE_CONTENT_DIGEST_VERSION = 19 export const ROUTE_LAST_MODIFIED: Readonly> = Object.freeze({ - "/": "2026-08-23T21:18:04+08:00", - "/part/a": "2026-08-23T21:18:04+08:00", - "/part/b": "2026-08-23T21:18:04+08:00", - "/part/c": "2026-08-23T21:18:04+08:00", - "/part/d": "2026-08-23T21:18:04+08:00", - "/part/e": "2026-08-23T21:18:04+08:00", - "/part/f": "2026-08-23T21:18:04+08:00", - "/part/g": "2026-08-23T21:18:04+08:00", - "/part/a/01": "2026-08-23T21:18:04+08:00", - "/part/a/complete": "2026-08-23T21:18:04+08:00", - "/part/a/multiple": "2026-08-23T21:18:04+08:00", - "/part/a/group": "2026-08-23T21:18:04+08:00", - "/part/a/mixed": "2026-08-23T21:18:04+08:00", - "/part/a/cost2d": "2026-08-23T21:18:04+08:00", - "/part/a/dep": "2026-08-23T21:18:04+08:00", - "/part/a/variant": "2026-08-23T21:18:04+08:00", - "/part/a/fractional": "2026-08-23T21:18:04+08:00", - "/part/b/path": "2026-08-23T21:18:04+08:00", - "/part/b/maxseg": "2026-08-23T21:18:04+08:00", - "/part/b/lis": "2026-08-23T21:18:04+08:00", - "/part/b/lcs": "2026-08-23T21:18:04+08:00", - "/part/b/edit": "2026-08-23T21:18:04+08:00", - "/part/b/fsm": "2026-08-23T21:18:04+08:00", - "/part/b/count": "2026-08-23T21:18:04+08:00", - "/part/c/stone": "2026-08-23T21:18:04+08:00", - "/part/c/ring": "2026-08-23T21:18:04+08:00", - "/part/c/palindrome": "2026-08-23T21:18:04+08:00", - "/part/c/tree": "2026-08-23T21:18:04+08:00", - "/part/c/merge": "2026-08-23T21:18:04+08:00", - "/part/d/grid": "2026-08-23T21:18:04+08:00", - "/part/d/matpow": "2026-08-23T21:18:04+08:00", - "/part/e/basic": "2026-08-23T21:18:04+08:00", - "/part/e/distsum": "2026-08-23T21:18:04+08:00", - "/part/e/inout": "2026-08-23T21:18:04+08:00", - "/part/e/center": "2026-08-23T21:18:04+08:00", - "/part/f/select": "2026-08-23T21:18:04+08:00", - "/part/f/knapsack": "2026-08-23T21:18:04+08:00", - "/part/f/diameter": "2026-08-23T21:18:04+08:00", - "/part/f/cover": "2026-08-23T21:18:04+08:00", - "/part/f/count": "2026-08-23T21:18:04+08:00", - "/part/g/board": "2026-08-23T21:18:04+08:00", - "/part/g/tsp": "2026-08-23T21:18:04+08:00", - "/part/g/cover": "2026-08-23T21:18:04+08:00", - "/part/g/subset": "2026-08-23T21:18:04+08:00", - "/part/g/plug": "2026-08-23T21:18:04+08:00", - "/method": "2026-08-23T21:18:04+08:00", - "/problems": "2026-08-23T21:18:04+08:00" + "/": "2026-08-27T05:20:51.219Z", + "/part/a": "2026-08-27T05:20:51.219Z", + "/part/b": "2026-08-27T05:20:51.219Z", + "/part/c": "2026-08-27T05:20:51.219Z", + "/part/d": "2026-08-27T05:20:51.219Z", + "/part/e": "2026-08-27T05:20:51.219Z", + "/part/f": "2026-08-27T05:20:51.219Z", + "/part/g": "2026-08-27T05:20:51.219Z", + "/part/a/01": "2026-08-27T05:21:25.030Z", + "/part/a/complete": "2026-08-27T05:21:25.030Z", + "/part/a/multiple": "2026-08-27T05:21:25.033Z", + "/part/a/group": "2026-08-27T05:21:25.032Z", + "/part/a/mixed": "2026-08-27T05:21:25.032Z", + "/part/a/cost2d": "2026-08-27T05:21:25.030Z", + "/part/a/dep": "2026-08-27T05:21:25.031Z", + "/part/a/variant": "2026-08-27T05:21:25.034Z", + "/part/a/fractional": "2026-08-27T05:21:25.031Z", + "/part/b/path": "2026-08-27T05:21:25.022Z", + "/part/b/maxseg": "2026-08-27T05:21:25.035Z", + "/part/b/lis": "2026-08-27T05:21:25.037Z", + "/part/b/lcs": "2026-08-27T05:21:25.021Z", + "/part/b/edit": "2026-08-27T05:21:25.020Z", + "/part/b/fsm": "2026-08-27T05:21:25.019Z", + "/part/b/count": "2026-08-27T05:21:25.036Z", + "/part/c/stone": "2026-08-27T05:21:25.027Z", + "/part/c/ring": "2026-08-27T05:21:25.026Z", + "/part/c/palindrome": "2026-08-27T05:21:25.025Z", + "/part/c/tree": "2026-08-27T05:21:25.026Z", + "/part/c/merge": "2026-08-27T05:21:25.028Z", + "/part/d/grid": "2026-08-27T05:21:25.023Z", + "/part/d/matpow": "2026-08-27T05:21:25.038Z", + "/part/e/basic": "2026-08-27T05:21:25.039Z", + "/part/e/distsum": "2026-08-27T05:21:25.039Z", + "/part/e/inout": "2026-08-27T05:20:51.219Z", + "/part/e/center": "2026-08-27T05:20:51.219Z", + "/part/f/select": "2026-08-27T05:21:25.041Z", + "/part/f/knapsack": "2026-08-27T05:21:25.042Z", + "/part/f/diameter": "2026-08-27T05:21:25.041Z", + "/part/f/cover": "2026-08-27T05:21:25.040Z", + "/part/f/count": "2026-08-27T05:21:25.042Z", + "/part/g/board": "2026-08-27T05:21:25.016Z", + "/part/g/tsp": "2026-08-27T05:21:25.017Z", + "/part/g/cover": "2026-08-27T05:21:25.016Z", + "/part/g/subset": "2026-08-27T05:21:25.017Z", + "/part/g/plug": "2026-08-27T05:20:51.219Z", + "/method": "2026-08-27T05:20:51.219Z", + "/problems": "2026-08-27T05:20:51.219Z" }) export const ROUTE_CONTENT_DIGESTS: Readonly> = Object.freeze({ - "/": "2f9dfb3659357c803fa448496d521d8743cf2012f269fa855e7a86c937ba35b2", - "/part/a": "502213527b7845226dde88866903d4453e7c92c87723b9e41eaec80b3023d8a7", - "/part/b": "a1adecfbeef6e8c2d1909edb894c8c555d86dabf7c22ffe9d7f63efd3f75cf55", - "/part/c": "097d6f200fef0060bb19f609431767353e93fc9c53f3a38ad17ae7a167371251", - "/part/d": "c604bc05b0769634ef3abec99537e0166edac7fa625f701f0ab3cf84e90da9a4", - "/part/e": "f1fae191144e92b3a5633528143b9f33c720857f9518547acc886e7b426666e1", - "/part/f": "1a143e46815e7709f9c00f79d9ba70caaed3a85e575e292f133394e75371e6d9", - "/part/g": "b19ac0f408d22b73a81a20d85a094bd8b3c3ae5350928c4307ba110f6f2b5858", - "/part/a/01": "9e8be59c886aa39be1353341da2e309db98c870a58a3bb6ab4d0f9b6f3348b63", - "/part/a/complete": "8c681dc3eca3a0f15fa95f48c3f8612fa21c8441bb6f5ba424d8c3abfd4653e8", - "/part/a/multiple": "e0953ccd1b26f5f0209cf9819737ec17d669cb740181af7c786e257365a2483e", - "/part/a/group": "40b1a3df7b7abcf5b0db4bc832c3a48173b657ea807d8d68d5bec9135ef9a074", - "/part/a/mixed": "00db01daaed45901775e8a9691489412d1b769b8450ca45fb7ef967b449e85f3", - "/part/a/cost2d": "61405556bc3c548d23bede38f6781a2e5e4833619ac916468a93c2802e3e2f93", - "/part/a/dep": "f4c4242de21dba579bc2bb189659ebb6fc01f770bfdc3508bdc25c1cc5a07e59", - "/part/a/variant": "c388740e4a77f7cdf3dba73212f56cd241a4d6d80e5554a7f1c399a0524d3747", - "/part/a/fractional": "3282649ca7f9cdc2e23cc3c99618872dbd4822431c8b0d3351cd5466d4bab3ea", - "/part/b/path": "025ac658f8d40ec2fb69ea76b74b6c4d9fbd8f32464675795edfaecb288c9439", - "/part/b/maxseg": "0f808fb9f5459716712e13ecf6e9125f4d08546007bca268bdceaa196b51fc0e", - "/part/b/lis": "8e356e350ea3370525f7a31d196ba9589420d05819794abfcdacaa64aa339347", - "/part/b/lcs": "492895df92ef65249f2d84e60cfb880dbbcda30835ba4e51d9fe35c245fb5527", - "/part/b/edit": "2130aeb741f341ef11f6ecdfaa3b6e2cdb217c9a2090edfbadab5508b6cb6292", - "/part/b/fsm": "5ee34fec66794f2105f39ea137c465975a4cc6a22bc2016cb300485dd7a50f0f", - "/part/b/count": "de1fcaa83ea827e2c3207ea43a91b13d31c2b954dd90c8defa7067268e57310a", - "/part/c/stone": "387740392af68fd8732088a83e1c2e196dc977bec4d0b5e0ec25b12a5e3d9786", - "/part/c/ring": "b265c321269c859d5fc95fe358fc67638a79d19dd7b73a719e5124958d6ceae6", - "/part/c/palindrome": "8f4672682886ca800ee572955a92e13aa269cd0ca4e63739407664ced9d786e6", - "/part/c/tree": "1c350ff7bdf4690af87348a93d412f375631af21478d92faded0d8d5a368b3c7", - "/part/c/merge": "b2bd2ffeeb427b3c7b8f99287ccbae3653dce8869c7c067885f642dffce9530b", - "/part/d/grid": "e2aaedfdbc6817e5364d8007723f9df80b62de31ff0d5bbcbb84e30f788a8359", - "/part/d/matpow": "a5434571f8dd309a23cb12cb02624f0debd0aa52b1eaa48d01deeeff72b0c617", - "/part/e/basic": "6f4f057d8ee06628ae9db6f7b797268f34eb27be032f2ab3b9ad1585128601c5", - "/part/e/distsum": "d79e2539bd4ffbe7d9b166bad8ae1f8883eaee34c7d6336c7e529ea46fbed31d", - "/part/e/inout": "d469f4907c35f5aa2a11ff03583959956918730352f24f58130290e4748eed22", - "/part/e/center": "bacf35b59b0f63acb575c42da5f39e29429e89b31b6a27d12fb294f22e50b896", - "/part/f/select": "588a1f556c3a64f99530ce54deb80ca2254df55647d50170eff57958bb3de2c3", - "/part/f/knapsack": "32ca3baa20888f4c4c49b6668f7dd6258edf735ad4f0612365f117489962d2ca", - "/part/f/diameter": "ae6a5608d2e13efb2cf2052d31876d1b8e385f116a0d7bc400312329bbbbb5db", - "/part/f/cover": "052a5780a9845a9dcd42edf5a35551d4642fff41b0c3fe8f5b44a2fc97e63fd0", - "/part/f/count": "dedc5fcad88eb370b00ac8af3289df99188316a589b8ec585c89e81a2b60e59d", - "/part/g/board": "f65e12a40f116346fd789598fc1deeb6e909538a4f7fd11c428f6e7082565eb3", - "/part/g/tsp": "234652f63ec666ea31702873a93859e27827266b5aa1d9ebe67f29f77a311f01", - "/part/g/cover": "0b6b244e17e3ef553c53d0af76514963148f9e7a6939ecd1b74c1ce4a7558863", - "/part/g/subset": "18d2cde4a65edc43d9e5d18a3110dd5d6ddff3d573f7f4e9686f3b8a3dd8df21", - "/part/g/plug": "e56f55e3e80328d0308c68ab8405d51e7e00b3818e456909ac90ff867588df34", - "/method": "2e6abc5e41bf722c9ab7c3a76d7578e97cba4bff5dcc9cc212fb1d2c67cb160e", - "/problems": "4c57b8977d0194e6fcfe37ae833a31ee41495ff2ce2ec7ea5b746df0827c4536" + "/": "7c000b3d8829b2c69c2e1674a84fec639ac0e26f952e21bc87758989e9570a6f", + "/part/a": "ad681d0b46b4a8c98c2769e319fe953a26796af38d505e3151e542e1168dee0e", + "/part/b": "77b10f1342aa258b47eb128a451421a8769fb9b03cfc860e9b38f842a9d28787", + "/part/c": "3fa8245721e23c5e62ece79fd564303921754d6568de195a619b2fa88e3a275f", + "/part/d": "c1ae6b43b090bbf23b1909fd652c17a888e6cd1c76a5b55489b5cfa22f1e47ea", + "/part/e": "4de68f562839281a9ef560ba8661f8553094ecf1df754cdcbecbb82e78296777", + "/part/f": "2adc3ae92073838fe91fb7ea47cfbb082c4d92d66edb8cc50c0e34576a036493", + "/part/g": "da6dac3360eaf84dca96a7313d9bd8314fd7c07b3ca50a75945e2ca300977a32", + "/part/a/01": "248968051fc172b6878a4917f9f2e98c8aa9c05f9632d7fec892326f98008dbe", + "/part/a/complete": "97aeb4ded53628b98a94f1b14630826a776f11e3b05977a928410910b974e871", + "/part/a/multiple": "8d3fe0a8dd6f5e93c484e9f42c97655cbf40503a28d19e994eacdc5da53991fc", + "/part/a/group": "687c1d240e308334e58706f070ffaa1713b9c95b89da08a856cfe169dd5e954a", + "/part/a/mixed": "b723cdd0cf03cd58146ec1f71e3f3b0b004b07115a1515b78b9301287dcc3fe0", + "/part/a/cost2d": "27ee2d02c7c9e388b551d19be09a642d25955114a376dce3f3048fb4529fb453", + "/part/a/dep": "f0dd581f4572428a73dc34e52372cc63e282a3b12bfc79c6ea805b18e03f52e6", + "/part/a/variant": "fb9c74a0c2e171b7288bd81ad09521e64645bdb9584c13a7df46392a50eae492", + "/part/a/fractional": "3937855f35fa311d85c82747abae4422617376345f5ee9c3ec8975c1ef39638f", + "/part/b/path": "7d690705a86143494974291f3071901ce43787339486d04a7ff34ec8d39b4470", + "/part/b/maxseg": "875c5949f1f4fad4198d1da6bd8a751ba8efa1946150f79344f6e1d6710ac3f5", + "/part/b/lis": "0ae929b38ddc36147d980789683a734ae86ee333f2453be0d36769f49eacb1a6", + "/part/b/lcs": "7cf95cf74da3524ad91631726944a575d93fb2fe72520d39f3e5362d0fe0177b", + "/part/b/edit": "f42cf1f53407e77dafba22206a59050cacddd63c8983d9d1f2a95e02c7876da2", + "/part/b/fsm": "b843db0863d4cdeff92dd984a16a549db77de7268c45d5a003a7bf2d62fef901", + "/part/b/count": "797be32219b419bfc743b2f7f5ab390806f2ea05fb3cdeb7cc5e365bdc2c83b6", + "/part/c/stone": "4c347b67f0d1d0f892ddf9e834e0aecef5d4e36a7e893630510e07ee7caa158a", + "/part/c/ring": "558e06a32db944d38192c8a77df84eba2d7e73ceeb62df4c7204945074ba588f", + "/part/c/palindrome": "87e320d148af0e3dc3c802824fd0bd95dd03d8c90ebc7a942776e4002e3e2f1e", + "/part/c/tree": "d43fcf9b6c21dead96562a95378083710ef696feca4b84a7c611a60a10a72d11", + "/part/c/merge": "30b675668cde9089930ee8ba41b8966e44652374172541ec676d4fa3fb5676e4", + "/part/d/grid": "22d5036edddde47cf314dd1cf2fb8a9e2d04b7f592e9c949f8a2f40e5792d9cc", + "/part/d/matpow": "fa49e6eea145d55275161dad682d73b34faa67470442ca09c195c41704789181", + "/part/e/basic": "f2f2f912b651e7015372c0a5c9973ab89b817828e762b32b19f98016416d8bac", + "/part/e/distsum": "e83ed68044d13668de785c6157c1b66bc3ed7126b032dfc7f9ca52b22d339032", + "/part/e/inout": "b09d8c476d21039fd2303b3631886300bfba7eb7351b9a7aa54290ddf3c789e2", + "/part/e/center": "36fc163876eb083f56b4abdc03dd01c6242ecfc2c169d55d673de7172cbabf82", + "/part/f/select": "e0b7d2e754464340290c46079354cd2cb82cb51dccef79ef554f45808d3b575a", + "/part/f/knapsack": "6e2ae0b3160510f022917ad6ee48e2ef9d6bff65d033ef52f716483113f8faba", + "/part/f/diameter": "ed8eba95e3c93dfd9adcc7403df562b5d202a652465f93794ed050728867979f", + "/part/f/cover": "75b16801d8c7f3a846e3efabfcfd31b94de034ca75c5f62577391fd88db49140", + "/part/f/count": "b19bd0bc43df9f17a65c631d2a233defc33bb65558db03960e552fe78c5f34a6", + "/part/g/board": "cb13cb71123c91c77cbe9a1caa63f48b190129bf3bca0a072524a09b6b124cc7", + "/part/g/tsp": "cf0fee76863f77d7fa92bb2f0195d93eb19fd8f1ae2f4da7adc96598bdfa2e70", + "/part/g/cover": "db3be9962ce022cd5d70a69889e500a761a9cd827175ea867444336695d61550", + "/part/g/subset": "9e2968bcbf4bea2666842a0a21d3a5ae6251aff5fe95bd2d0c26b06871733133", + "/part/g/plug": "da66e08fd54a974c4a9e3db839af2f7bc098dea5f381908922705e55b440fb52", + "/method": "7175149726b7d40d68e230afa4d750b1bc99c9229d9cb9edecae30fbfcc5a586", + "/problems": "38d47a7ecbff1e978180cb433fa37bd8ec960b6e935fd2c6a9c005fabd4be8e6" }) diff --git a/site/src/pages/ProblemsPage.tsx b/site/src/pages/ProblemsPage.tsx index 5ae65b3..364b610 100644 --- a/site/src/pages/ProblemsPage.tsx +++ b/site/src/pages/ProblemsPage.tsx @@ -108,11 +108,12 @@ export default function ProblemsPage() { />
- {readyParts.map((p) => (