摘要:
## 最长公共子序列 ### 题目描述 给定长度为 $n$ 的数组 $a$,长度为 $m$ 的数组 $b$,求其最长公共子序列长度 ### DP $f[i][j]$ 表示 $a$ 前 $i$ 项和 $b$ 前 $j$ 项的最长公共子序列长度 因为如果我们要在序列尾巴上加元素是不跟前面选了什么有关系的 阅读全文
摘要:
## 最长上升子序列 ### 题目描述 给定一个长度为 $n$ 的数列 $a$,求其最长上升子序列长度 ### DP $O(n^2)$ $f[i]$ 表示以 $i$ 结尾的最长上升子序列 显然有 $f[i]=max(f[i],f[j]+1)$ 其中 $1\leq i \leq n,1\leq j\l 阅读全文
摘要:
给定一张 $n$ 个点、$m$ 条边的有向图,求 $1$ 号点到每个点的最短路径长度。 我们用 $dis_{i}$ 表示从点 $1$ 到点 $i$ 的最短距离。 + 初始化 $dis_{1}$ 为 $0$,其余为无穷大 + 找出点 $i$ ,满足 $dis_{i}$ 是未标记节点中 $dis$ 值最 阅读全文
摘要:
设 $f[i][j]$ 表示从第 $i$ 位开始 $2^j$ 的最值 很明显,有 $f[i][0]=a_i$ 还有 $f[i][j]=\max\{f[i][j-1],f[i+2^{j-1}][j-1]\}$ ### 预处理 ``` void prevwork() { for(int i=1; i<= 阅读全文
摘要:
### 01背包 给定 $n$ 件物品,每个物品有重量 $w_{i}$ 和价值 $c_{i}$,一个物品只有一件,求容量不超过 $m$ 的背包最多可以装多少价值物品 定义 $f_{i,j}$ 表示前 $i$ 件物品在容量不超过 $j$ 的背包下可以获得的最大价值则有 $f_{i,j}=\max\{f 阅读全文
摘要:
动态维护中位数 开一个大根堆一个小根堆,一个用于维护较小的一半的最大值,一个用于维护较大一半的最小值,每次输入之后通过调整堆保证两半区分,时间复杂度为 $O(\log n)$ 具体而言,有如下步骤: + 建立一个大根堆 $lt$,一个小根堆 $rt$ ,中位数 $mid$ + 对于一个新数 $x$, 阅读全文