随笔分类 -  dp

摘要:tag:dp,线段树,单调栈 设 \(f_i\) 为前 \(i\) 个元素的最小花费,则转移方程为: \[ f_i = \min_{[i,j]\text{可以放同一个数字}}f_{j-1}+1 \] 而 \([i,j]\) 可以放同一个数字就相当于是 \(\max l_i\le\min r_i\)。 阅读全文
posted @ 2021-06-25 09:35 oisdoaiu 阅读(30) 评论(0) 推荐(0)
摘要:tag:背包dp,数论 首先可以把给定的排列分成若干循环,将长度相同的分为一组,则可以分别处理每组然后乘起来。 对于一组数量为 \(cnt_a\) 长度为 \(a\) 的循环,再分成若干组,假设其中一组有 \(b\) 个,则必须满足 \(\gcd(ab,k)=b\)。而这样一组的贡献为 \((b-1 阅读全文
posted @ 2021-06-25 09:33 oisdoaiu 阅读(38) 评论(0) 推荐(0)
摘要:tag:序列自动机,状压dp 一眼看上去感觉不太好做,实际上可以枚举所有串,然后问题就变为统计一个串是多少个串的子序列。 可以构建一个子序列自动机,然后将初始状态(给出的字符串)设为 \(1\),再跑一个dp即可。 状态定义如下: \(f[len][S]\) 用一个01串表示状态 开头一个1,用来表 阅读全文
posted @ 2021-06-25 09:13 oisdoaiu 阅读(90) 评论(0) 推荐(0)
摘要:tag:区间dp 和AT3859 [AGC020E] Encoding Subsets一模一样。。(这个黑的还好写一点,因为是计数) 设 \(f(s)\) 为 \(s\) 的答案,\(g(s)\) 为将 \(s\) 表示成k(s') 的答案。 求 \(f\) 时枚举一个前缀,用 \(g(s_{[0, 阅读全文
posted @ 2021-06-25 09:02 oisdoaiu 阅读(52) 评论(0) 推荐(0)
摘要:tag:树形dp \(n^3\) 暴力,设 \(f_{i,j}\) 表示 \(i\) 的关键点为 \(j\)。 转移时枚举 \(x\) 的关键点和 \(son\) 的关键点,转移条件即为满足关键点的性质(关键点为所有源点中离它最近的) \(dis(x,p_x)\le dis(x,p_{son})\) 阅读全文
posted @ 2021-06-24 20:22 oisdoaiu 阅读(29) 评论(0) 推荐(1)
摘要:tag:背包dp,插值 考场50分,对着数据怀疑人生一个小时,然后教练过来说数据挂了。。 然而下发的标程也挂了,又怀疑人生了一个小时。。 对于 \(40%\) 很容易就能想到枚举 \(m\),然后跑背包dp。 仔细观察这个dp是形如: \[ \sum_{S\subseteq\{1\cdots n\} 阅读全文
posted @ 2021-06-24 20:21 oisdoaiu 阅读(40) 评论(0) 推荐(1)
摘要:tag:轮廓线dp 手玩一下会发现,最少需要4个镜子才能减少答案,多玩一下就能发现,减少的答案就等于镜子形成的回路长度。 \(ans=4nm-2len\) 为了计算这个东西,可以理解为,从镜子射出光线,然后贡献就是那些没有到达边界的光线的总长度。 然后问题就变成了,放 \(k\) 个镜子,形成的封闭 阅读全文
posted @ 2021-06-24 16:34 oisdoaiu 阅读(42) 评论(0) 推荐(0)