Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 23 additions & 23 deletions site/public/llms.txt

Large diffs are not rendered by default.

46 changes: 23 additions & 23 deletions site/public/route-summaries.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
"title": "01 背包 · 背包 DP · DP大师",
"summary": "01 背包课程回答“每件物品只能取一次时,为什么容量必须逆序更新”。内容以取或不取·一维逆推·恰好装满为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.030Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -83,7 +83,7 @@
"title": "完全背包 · 背包 DP · DP大师",
"summary": "完全背包课程回答“物品可无限取用时,正序更新如何复用本轮状态”。内容以无限件·一维正推为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.030Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -93,7 +93,7 @@
"title": "多重背包 · 背包 DP · DP大师",
"summary": "多重背包课程回答“有限件物品怎样从朴素枚举优化到二进制或单调队列”。内容以朴素·二进制·单调队列为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.033Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -103,7 +103,7 @@
"title": "分组背包 · 背包 DP · DP大师",
"summary": "分组背包课程回答“每组至多选一件时,如何隔离组内选择”。内容以每组至多选一件为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.032Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -113,7 +113,7 @@
"title": "混合背包 · 背包 DP · DP大师",
"summary": "混合背包课程回答“01、完全和多重物品怎样共用一套转移框架”。内容以01/完全/多重同题为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.032Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -123,7 +123,7 @@
"title": "二维费用背包 · 背包 DP · DP大师",
"summary": "二维费用背包课程回答“同时受两种容量约束时,状态维度与枚举顺序如何设计”。内容以两种费用同时受限为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.030Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -133,7 +133,7 @@
"title": "有依赖的背包 · 背包 DP · DP大师",
"summary": "有依赖的背包课程回答“带主件附件依赖的选择怎样转化为合法组合”。内容以主件-附件·依赖→分组为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.031Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -143,7 +143,7 @@
"title": "背包综合变形 · 背包 DP · DP大师",
"summary": "背包综合变形课程回答“背包模型如何扩展到计数、撤销和方案恢复”。内容以方案数·撤销·具体方案为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.034Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -163,7 +163,7 @@
"title": "路径型 / 递推入门 · 线性 DP · DP大师",
"summary": "路径型 / 递推入门课程回答“沿序列或网格推进时,如何定义最小充分状态”。内容以数字三角形·过河卒·方格取数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.022Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -173,7 +173,7 @@
"title": "最大子段和 · 线性 DP · DP大师",
"summary": "最大子段和课程回答“如何用一个局部状态维护最大连续子段”。内容以Kadane·环形·两段不相交为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.035Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -183,7 +183,7 @@
"title": "最长上升子序列 LIS · 线性 DP · DP大师",
"summary": "最长上升子序列 LIS课程回答“最长上升子序列如何从二次转移优化到对数查找”。内容以O(n²) 与 O(n log n)·导弹拦截为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.037Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -193,7 +193,7 @@
"title": "最长公共子序列 LCS · 线性 DP · DP大师",
"summary": "最长公共子序列 LCS课程回答“两个序列的公共结构如何通过二维状态刻画”。内容以排列 LCS→LIS·计数为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.021Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -203,7 +203,7 @@
"title": "编辑距离 · 线性 DP · DP大师",
"summary": "编辑距离课程回答“插入、删除和替换如何统一进编辑距离转移”。内容以删/插/改三向转移为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.020Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -213,7 +213,7 @@
"title": "线性状态机 DP · 线性 DP · DP大师",
"summary": "线性状态机 DP课程回答“带持有或选择限制的问题怎样画成有限状态机”。内容以受限选取·股票买卖为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.019Z",
"lastModified": "2026-08-27T06:00:57.462Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -223,7 +223,7 @@
"title": "计数 / 划分型 · 线性 DP · DP大师",
"summary": "计数 / 划分型课程回答“计数与划分问题如何避免重复或遗漏方案”。内容以方案数·高精度·整数划分为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.036Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -233,7 +233,7 @@
"title": "石子合并(链形) · 区间 DP · DP大师",
"summary": "石子合并(链形)课程回答“区间合并代价为何要按长度递增计算”。内容以区间合并基础模型为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.027Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -243,7 +243,7 @@
"title": "环形区间 DP · 区间 DP · DP大师",
"summary": "环形区间 DP课程回答“环形区间怎样通过复制序列转化为链形区间”。内容以断环为链·能量项链为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.026Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -253,7 +253,7 @@
"title": "回文 / 括号 · 区间 DP · DP大师",
"summary": "回文 / 括号课程回答“端点匹配如何组织回文与括号类转移”。内容以收缩扩展·端点匹配为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.025Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -263,7 +263,7 @@
"title": "加分二叉树型 · 区间 DP · DP大师",
"summary": "加分二叉树型课程回答“枚举区间根节点时,子区间如何对应左右子树”。内容以枚举根·区间即子树为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.026Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -273,7 +273,7 @@
"title": "合并 / 删除类 · 区间 DP · DP大师",
"summary": "合并 / 删除类课程回答“合并与删除过程怎样压缩成区间状态”。内容以2048·区间删除代价为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.028Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -283,7 +283,7 @@
"title": "网格 / 矩阵上的 DP · 矩阵 DP · DP大师",
"summary": "网格 / 矩阵上的 DP课程回答“网格路径、最大正方形和双路径如何选择状态维度”。内容以路径·最大正方形·双线程为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.023Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand Down Expand Up @@ -403,7 +403,7 @@
"title": "集合状压 / TSP · 状压 DP · DP大师",
"summary": "集合状压 / TSP课程回答“集合访问状态如何保证 Hamilton 路径不重不漏”。内容以最短 Hamilton·吃奶酪为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.017Z",
"lastModified": "2026-08-27T06:00:55.302Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand All @@ -413,7 +413,7 @@
"title": "状压 + 覆盖 · 状压 DP · DP大师",
"summary": "状压 + 覆盖课程回答“几何覆盖选择怎样预处理成可转移的状态集合”。内容以愤怒的小鸟·宝藏为主线,配合逐步推导、可编辑演示、例题与练习形成可复查的学习闭环。",
"type": "lesson",
"lastModified": "2026-08-27T05:21:25.016Z",
"lastModified": "2026-08-27T06:00:52.946Z",
"reviewedBy": "AzureL蔚澜算法",
"reviewStatus": "持续复核"
},
Expand Down
46 changes: 23 additions & 23 deletions site/public/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,103 +14,103 @@
</url>
<url>
<loc>https://dp.round1.cc/part/a/01</loc>
<lastmod>2026-08-27T05:21:25.030Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/complete</loc>
<lastmod>2026-08-27T05:21:25.030Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/cost2d</loc>
<lastmod>2026-08-27T05:21:25.030Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/dep</loc>
<lastmod>2026-08-27T05:21:25.031Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/fractional</loc>
<lastmod>2026-08-27T05:21:25.031Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/group</loc>
<lastmod>2026-08-27T05:21:25.032Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/mixed</loc>
<lastmod>2026-08-27T05:21:25.032Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/multiple</loc>
<lastmod>2026-08-27T05:21:25.033Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/a/variant</loc>
<lastmod>2026-08-27T05:21:25.034Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b</loc>
<lastmod>2026-08-27T05:20:51.219Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b/count</loc>
<lastmod>2026-08-27T05:21:25.036Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b/edit</loc>
<lastmod>2026-08-27T05:21:25.020Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b/fsm</loc>
<lastmod>2026-08-27T05:21:25.019Z</lastmod>
<lastmod>2026-08-27T06:00:57.462Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b/lcs</loc>
<lastmod>2026-08-27T05:21:25.021Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b/lis</loc>
<lastmod>2026-08-27T05:21:25.037Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b/maxseg</loc>
<lastmod>2026-08-27T05:21:25.035Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/b/path</loc>
<lastmod>2026-08-27T05:21:25.022Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/c</loc>
<lastmod>2026-08-27T05:20:51.219Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/c/merge</loc>
<lastmod>2026-08-27T05:21:25.028Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/c/palindrome</loc>
<lastmod>2026-08-27T05:21:25.025Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/c/ring</loc>
<lastmod>2026-08-27T05:21:25.026Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/c/stone</loc>
<lastmod>2026-08-27T05:21:25.027Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/c/tree</loc>
<lastmod>2026-08-27T05:21:25.026Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/d</loc>
<lastmod>2026-08-27T05:20:51.219Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/d/grid</loc>
<lastmod>2026-08-27T05:21:25.023Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/d/matpow</loc>
Expand Down Expand Up @@ -170,7 +170,7 @@
</url>
<url>
<loc>https://dp.round1.cc/part/g/cover</loc>
<lastmod>2026-08-27T05:21:25.016Z</lastmod>
<lastmod>2026-08-27T06:00:52.946Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/part/g/plug</loc>
Expand All @@ -182,7 +182,7 @@
</url>
<url>
<loc>https://dp.round1.cc/part/g/tsp</loc>
<lastmod>2026-08-27T05:21:25.017Z</lastmod>
<lastmod>2026-08-27T06:00:55.302Z</lastmod>
</url>
<url>
<loc>https://dp.round1.cc/problems</loc>
Expand Down
9 changes: 8 additions & 1 deletion site/src/components/demos/bitmask/CoverDemo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,14 @@ function MiniBits({ mask, n, tone }: { mask: number; n: number; tone: 'on' | 'of
const gap = 3
const w = n * cell + (n - 1) * gap
return (
<svg viewBox={`0 0 ${w} ${cell}`} width={w} height={cell} className="bm__minibits">
<svg
viewBox={`0 0 ${w} ${cell}`}
width={w}
height={cell}
className="bm__minibits"
role="img"
aria-label={`二进制掩码 ${mask.toString(2).padStart(n, '0')}`}
>
{bits.map((b, i) => (
<rect
key={i}
Expand Down
7 changes: 6 additions & 1 deletion site/src/components/demos/fsm/StockStateDemo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,12 @@ export default function StockStateDemo() {
</div>
</div>
<label className="stk__cd">
<input type="checkbox" checked={cooldown} onChange={(e) => setCooldown(e.target.checked)} />
<input
type="checkbox"
checked={cooldown}
onChange={(e) => setCooldown(e.target.checked)}
aria-label="冷却期(卖出次日不能买入)"
/>
冷却期(卖出次日不能买入)
</label>
</div>
Expand Down
1 change: 1 addition & 0 deletions site/src/components/dp-engine/DPViz.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ export default function DPViz({ model }: { model: VizModel }) {
width={model.cols * cell}
height={model.rows * cell}
viewBox={`0 0 ${model.cols * cell} ${model.rows * cell}`}
aria-hidden="true"
>
<defs>
<marker id="ah-src" markerWidth="7" markerHeight="7" refX="5.5" refY="3" orient="auto">
Expand Down
Loading