摘要: 状压 dp: 是对 dp 状态表示的优化。 若有多个维度,每个维度仅有 \(0/1\),则将状态转为一个二进制数,并以十进制数表示。 位操作(全 文 背 诵): 任意二进制数位 \(\operatorname{and} \ 1\) 得本身。 任意二进制数位 \(\operatorname{xor} 阅读全文
posted @ 2024-04-20 19:02 _XOFqwq 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 妙妙题大合集。 T1 令 \(dp_{i,j}\) 表示分离出以 \(i\) 为根的恰含 \(j\) 节点的树所需的最小删边数。 有初始状态 \(dp_{i,1}=\) 其子节点个数,其余为 \(\infty\)。 对于答案,我们考虑到对于每个节点 \(i\),除了其子树内的删边数之外,它的父节点与 阅读全文
posted @ 2024-04-13 21:42 _XOFqwq 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 本期题目均为 \(\texttt{II}\) 类树形 dp,即树上多重背包。 T1 令 \(dp_{i,j}\) 表示以 \(i\) 为根的子树保留 \(j\) 条边的最大边权。 答案即为 \(dp_{1,q}\),因为不管 \(1\) 连着的边选 / 不选,答案都会上传到根。 当然如果你愿意,求一 阅读全文
posted @ 2024-03-30 21:36 _XOFqwq 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 树形 dp:在树形结构上的 dp 问题。 \(\texttt{I}\) 类树形 dp:兄弟子树间无数量约束关系。 \(\texttt{II}\) 类树形 dp:兄弟子树间有数量约束关系(即树上背包 / 有依赖的背包)。 本期题目均为 \(\texttt{I}\) 类树形 dp。 T1 令 \(dp_ 阅读全文
posted @ 2024-03-23 23:22 _XOFqwq 阅读(4) 评论(0) 推荐(0) 编辑
摘要: T1 构思分讨。 很自然地,我们令 \(dp_{i,j}\) 表示 \([i,j]\) 的初始字母方案数。 但是这个状态信息过少,不足以解决此问题。 于是我们增加状态维度,令 \(dp_{i,j,0/1/2/3}\) 表示 \([i,j]\) 是否能由 W/I/N/D 演变而来。 答案即为 \(dp 阅读全文
posted @ 2024-03-16 19:01 _XOFqwq 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 双倍经验:P2758。 令 \(dp_{i,j}\) 表示 \(s\) 前 \(i\) 个字符要变成 \(t\) 前 \(j\) 个字符所需的最少移动次数。 答案即为 \(dp_{\lvert s \rvert,\lvert t \rvert}\)。 显然有初始状态 \(dp_{i,0}=dp_{0 阅读全文
posted @ 2024-03-16 17:35 _XOFqwq 阅读(1) 评论(0) 推荐(0) 编辑
摘要: T1 令 \(dp_{i,j}\) 表示卖出区间 \([i,j]\) 能获得的最大价值。 显然答案为 \(dp_{1,n}\)。 因为只能卖 \(i\) / \(j\),所以有转移: \[dp_{i,j}=\max(dp_{i+1,j}+v_i \times (n-len+1),dp_{i,j-1} 阅读全文
posted @ 2024-03-09 22:01 _XOFqwq 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 本期主要讲解模拟、枚举算法。 例题 T1 简单模拟题。 利用 scanf/cin 以 int 形式读入分和秒,并令秒循环累加,逢 \(60\) 归 \(0\) 并向分进 \(1\),分则是逢 \(24\) 归 \(0\)。 在循环的过程中若分秒合起来是回文数字,则退出循环,按照题目格式输出当前时间。 阅读全文
posted @ 2024-03-09 12:50 _XOFqwq 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 本期主要讲解 vector、map 两个 STL 容器。 知识点: 首先,引入两种数组的区别: 静态数组,指提前声明需要多少内存的数组,是连续的; 而动态数组则是在插入元素时临时指定存储空间,不要求连续。 STL vector 是一个动态数组,下标默认从 \(0\) 开始。它支持的操作如下: 定义: 阅读全文
posted @ 2024-03-09 12:49 _XOFqwq 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 本期主要讲解二分查找。 知识点 二分查找: 思想:分治。 使用场景:在一个有序序列中,反复查找不同目标。 时间复杂度:\(O(n \log n)\)。 实现: 对数列排序; 确定二分边界(通常为 L=最小下标-1,R=最大下标+1); 伪代码: int L=左边界-1,R=右边界+1; while( 阅读全文
posted @ 2024-03-09 12:49 _XOFqwq 阅读(1) 评论(0) 推荐(0) 编辑