两个指针 l、r,r 一路往右扩;窗口”违法”了就 l 往右收,合法了就更新答案。两个指针各自最多走 N 步,
一句话: 用两个指针的相对运动,把
每步选当前看起来最优的,寄希望于全局最优。难点不在写代码,在于证明这一步贪是对的。
...差分数组 = 前缀和的逆运算。区间 [l, r] += k 这种 diff[l] += k; diff[r+1] -= k,
一句话: DFS 一遍, 每个节点的答案 = 子树聚合 + 自己的贡献。本质是后序遍历 + 状态在节点上传递, 自底向上 return。
...状态 dp[i][j] 是一段区间的最优答案,转移枚举区间内的”分割点” k。关键不是公式,而是枚举顺序: 必须从短区间到长区间,因为 dp[i][j] 要先有 dp[i][k] 和 dp[k+1][j] 才算得出来。记住这一句,石子合并、戳气球、矩阵链乘就是同一道题。
DP = 子问题 + 不重复计算。把指数级搜索压成多项式,全靠”算过的别再算”。
...每个节点存一个字符,从根到叶的路径就是一个完整字符串。共同前缀的字符串共用前面的节点 — 这就是为什么叫”前缀树”。插入/查询都是
DAG 里给所有节点排个序,使得每条边都从靠前的指向靠后的。两种实现各背一份:Kahn 算法(BFS 入度法)和 DFS 后序逆序。顺手就把环检测做了。
...Dijkstra = BFS + 贪心。把 FIFO 队列换成优先队列,每次从未确定的节点里挑距离最小的那个去松弛邻居。前提:边权非负——因为已确定节点的距离一旦敲定就不再回头。
...