合集-dp

摘要:标题 from 题目背景。 题意:给你一个 DAG 然后在这个图上加一条边,加完之后不一定是 DAG。求满足如下条件的树的数量: 每个父亲到它的儿子们都有一条边。 先考虑是一个 DAG 的情况。发现答案即为 \(\prod in_i\)。原因显然。 麻烦的情况是它不是 DAG。发现多出来的非法的情况 阅读全文
posted @ 2023-12-04 18:15 yinhee 阅读(24) 评论(0) 推荐(0)
摘要:题意:定义 \(f_i\) 为 \(\max\limits_{u\in subtree(i)} dis_{i,u}\)。要求维护 \(\oplus_{v\in s\rightsquigarrow t}f_v\),支持换根。 这题意写得自己大脑萎缩了。 换根?做CF916E就会了。\(f_i\) 怎么 阅读全文
posted @ 2023-12-04 18:14 yinhee 阅读(19) 评论(0) 推荐(0)
摘要:非常好题目,使我的大脑旋转(?) 还是一样,介绍思路。 既然题目让我们计算 \(f_{\max}(n)\) 的数量,则先考虑 \(f_{\max}(n)\) 的值怎样求得。容易发现,设 \(n=\prod p_i^{k_i},p_i\in \operatorname{prime}\) ,则 \(f( 阅读全文
posted @ 2023-11-15 21:54 yinhee 阅读(33) 评论(0) 推荐(0)
摘要:做起来真的没有想象中的那么难(?)感谢 @zltqwq 讲的好题/bx 首先考虑蜡烛可以烧到负数长度怎么做。发现这题等同于关路灯。设个状态:\(dp_{i,j,0/1}\) 表示当前 \([i,j]\) 范围内的蜡烛都已熄灭,现在人在左/右端点的最大答案。枚举从 \([i+1,j]\) 或 \([i 阅读全文
posted @ 2023-11-08 22:00 yinhee 阅读(49) 评论(0) 推荐(0)
摘要:虽然做法大致相同,但是本篇题解将会讲述如何想出正解,分享我的思路。望通过。 首先看到题目,容易想到一个简单很多的情况:在一条链上,且终点确定。此时就可以把终点两边的点分开,分别计算到终点的距离之和,看是否相等即可。 没有确定终点时,枚举一个终点即可。 考虑将这种做法带入本题。先 \(O(n)\) 枚 阅读全文
posted @ 2023-11-08 21:59 yinhee 阅读(28) 评论(0) 推荐(0)
摘要:首先考虑一些简单的情况,比如 \(m=1\)。 容易发现操作 1 和操作 2 的顺序不会影响结果,于是可以钦定所有操作 1 在操作 2 之前。并且可以发现,进行完所有 1 后 2 的次数即为 \((\text{连续段个数}-1)\)。 然后考虑将 \(m>1\) 的情况。显然最后序列上每 \(m\) 阅读全文
posted @ 2023-10-12 15:14 yinhee 阅读(162) 评论(5) 推荐(1)
摘要:发现直接记录有哪些奖品被选是不可能的,所以考虑转换一下思路:设 \(dp_{i,j,p}\) 为只考虑前 \(i\) 个奖品,抽了 \(j\) 次,有 \(p\) 种不同奖品的的概率。 这个状态相当于是维护一个操作(抽奖)序列。考虑每次加入 \(q\) 个第 \(i\) 种奖品,就相当于是将原序列和 阅读全文
posted @ 2023-07-15 19:34 yinhee 阅读(31) 评论(0) 推荐(0)
摘要:果然自己想出来和看题解做出来是完全不同的感觉…… 首先考虑没有不相遇的限制条件怎么做。发现这个问题就是 P1144 再加上乘法原理。 然后思考如何处理相遇的情况。容易想到枚举相遇的点和边。首先从 \(s\) 和 \(t\) 开始各跑一遍最短路,\(dis_{u,0/1},cnt_{u,0/1}\) 阅读全文
posted @ 2023-07-15 19:26 yinhee 阅读(41) 评论(0) 推荐(0)
摘要:既然是博客园的第一篇题解,那就搬点有意义的吧 题目传送门 解题思路:递推 一道很好的锻炼推式子能力的题,也是本蒟蒻第一道一遍过的紫题。 既然是递推,那就先定义一下状态:\(f_i\) 表示在执行完第 \(i\) 个操作后,可能得到的字符串数量。 很明显,我们需要分两种情况讨论:这次操作为添加字符或退 阅读全文
posted @ 2023-01-09 15:13 yinhee 阅读(152) 评论(1) 推荐(0)
摘要:看到很大的范围限制,很容易想到数位 dp,记录当前 \(mod\ X\) 的值。但是 \(X\) 会非常大,复杂度爆炸。 考虑不用数位 dp 怎么做。容易想到直接枚举 \(X\) 倍数然后判断是不是只用了所给数字。这样又因为 \(X\) 可能非常小,再次爆炸。 想到可以结合一下两种方法,考虑根号分治 阅读全文
posted @ 2023-02-17 21:36 yinhee 阅读(56) 评论(1) 推荐(0)
摘要:感觉是那种,看到题就能猜到大概思路的题。 首先给题目条件增加限制:考虑 \(x_i\leq 7\) 的时候怎么做。这启示我们思考一个和值域相关的做法。 很容易想到一个树形 dp:设 \(dp_{u,i}\) 为在以 \(i\) 为根的子树中,\(u\) 所在连通块异或和为 \(i\) 时方案数与其他 阅读全文
posted @ 2023-12-23 21:38 yinhee 阅读(20) 评论(0) 推荐(0)
摘要:先 orz oyds。但是为什么没有 oyds 的简单预处理做法啊。 区间 dp。\(dp_{i,j}\) 表示凑出区间 \([i,j]\) 的最小代价。考虑枚举当前区间 \([i,j]\) 与 \(k\),表示 \([i,j]\) 在区间 \([p,j]\) 中出现了 \(k\) 次,且 \(p\ 阅读全文
posted @ 2023-12-23 21:39 yinhee 阅读(35) 评论(0) 推荐(0)
摘要:先将暴力转移方程列出来:设 \(dp_{i,j,k,l}\) 表示当前 A 牌堆最上面三张分别是第 \(i,j,k\) 张牌,B 牌堆最上面是第 \(l\) 张的最大价值。则有: \[dp_{i,j,k,l}\to dp_{j,k,k+1,i}(c_i=c_l\lor a_i=a_l) \]\[dp 阅读全文
posted @ 2023-12-23 21:41 yinhee 阅读(24) 评论(0) 推荐(0)
摘要:其实赛时可能可以做出来的,只是打了前 6 道想下班了,有点小小遗憾。 首先问题看起来很唬人,考虑转换一下。考虑已经固定 \(m\) 条边,对于一个集合 \(S\),什么时候会不与其他点有边。容易发现,此时需要满足 \(\sum[R_i\in S]=\sum [B_j\in S]\)。记这个数为 \( 阅读全文
posted @ 2023-12-23 21:44 yinhee 阅读(48) 评论(0) 推荐(0)
摘要:居然差一点场切了。 首先可以将两棵树上对应的点看作一个点的两个不同状态考虑一个类似最短路的东西:设 \(dis_{i,j,0/1,0/1}\) 为树上 \(0/1\) 状态的 \(i\) 点到 \(0/1\) 状态的最短路。考虑怎样维护这个值。 由于是树上路径问题,容易发现设 \(k\) 为树上 \ 阅读全文
posted @ 2023-12-23 21:45 yinhee 阅读(23) 评论(0) 推荐(0)
摘要:dp+根号分治,配得上省选题的难度。 一眼 dp,虽然暴力肯定过不了,但是把朴素转移先列出来绝对没坏处。 \[dp_i=\min\limits_{1\leq j<i}(dp_j+\min\limits_{j\leq k\leq i}a_k\times v) \]这个东西很难用 DS 维护,有 \(\ 阅读全文
posted @ 2023-12-23 21:49 yinhee 阅读(27) 评论(0) 推荐(0)
摘要:大常熟另类做法。不用排序。 要求直径长度,则想到把直径这一条链拎出来处理。然后考虑其他边会接在哪里,发现树最优情况下一定是一个毛毛虫的形式。更进一步,所有边都挂在接近直径中点的点上。 然后再考虑这些不在直径中的,长度为 \(l\) 的边带来的限制,设直径为 \(d\),从每个点将直径切成两半,记其中 阅读全文
posted @ 2024-01-07 22:06 yinhee 阅读(18) 评论(0) 推荐(0)
摘要:%赛场切了! 矩阵是不太好处理的,所以考虑从一行去推下一行。 设上一行选择了 \(p_1,p_2,\cdots,p_k\) 这几个横坐标的位置为 \(1\),分情况讨论一下这一行选择的 \(x\) 位置。 (下列结合自己画图理解) \(x\ge p_1\)。 首先发现如果选择一个 \(x\not\i 阅读全文
posted @ 2024-01-16 17:05 yinhee 阅读(26) 评论(0) 推荐(0)
摘要:我不会高妙建树做法。喜提最劣解。差点被卡常,但是过了,赢。 考虑从后往前 dp,\(dp_i\) 为以 \(i\) 开头的路径方案数。考虑一个 \(i\) 能从哪些 \(j\) 转移来。发现 \(j\) 一定是从 \(i\) 开始,除了最后一个点,只经过 \(\le i\) 的点能到达的点。 这个条 阅读全文
posted @ 2024-01-21 10:06 yinhee 阅读(18) 评论(0) 推荐(0)
摘要:虚高 *2800。放模拟赛 T2 人均切了。 先想树的情况怎么做。枚举每个起点,剩下的贡献就是定值。求这个值可以钦定 \(1\) 为根求出所有的 \(siz\),然后枚举 \(i\) 为起点,以 \(i\) 为起点的答案就是 \(\sum siz_i\) 加上 \(i\) 到 \(1\) 路径上,不 阅读全文
posted @ 2024-03-09 10:16 yinhee 阅读(23) 评论(0) 推荐(0)
摘要:虚高 *2800,放模拟赛 T1 人均切了。 这是 zlt 说的,不是我说的,我还是觉得没那么虚高的。 首先显然是数位 dp。 一个关键点就是怎么计算 \(f_i\times f_{i+1}\)。会发现可以将为 \(4\) 的位置看作 \(0\),否则为 \(1\),则二进制下 \(f_{i+1}= 阅读全文
posted @ 2024-03-09 10:17 yinhee 阅读(29) 评论(0) 推荐(0)
摘要:orz sinsop90/bx 乌龟和 sinsop 结芬!!! 题意即数最大匹配为 \(k\) 的二叉树个数。数树问题,考虑不断加入子树 dp。但是这题是二叉树,所以可以直接每次将两个并作一个转移。 考虑怎么设计状态:子树 \(siz\) 肯定是要记的,然后最大匹配数也是。发现只记这两个不好转移, 阅读全文
posted @ 2024-03-09 10:23 yinhee 阅读(23) 评论(0) 推荐(0)
摘要:同样来自 @Explodingkonjac 学长的讲题。但是我没认真听讲,所以自己想出来了。 原本的想法是设对于每一组分别设 \(dp_{i,j}\) 为当前枚举到第 \(i\) 个位置,已经钦定了 \(j\) 个该组中的人投给自己组的方案数。转移就是枚举有多少人投给 \(i\) 然后容斥。 但是可 阅读全文
posted @ 2024-03-09 10:29 yinhee 阅读(37) 评论(0) 推荐(0)
摘要:小丑,做这种题做半天。 首先发现有贡献的位置是一个斜正方形,从内到外贡献系数依次递减。先拆成四个部分(四个直角三角形),每次将整个矩形旋转来分别做,最后简单容斥一下。 考虑对于一个直角三角形怎么计算贡献。考虑从它左边的一个三角形转移过来。设定点为 \((i,j)\) 的三角形贡献为 \(f_{i,j 阅读全文
posted @ 2024-03-09 10:31 yinhee 阅读(25) 评论(0) 推荐(0)