随笔分类 -  dp

摘要:有同学让我造福人类,所以来写一篇。 考虑显然没有什么通项公式可以利用的,但是注意到 \(m\) 仅仅只有小小的 \(6\),考虑状压 \(dp\) 的思路。设 \(dp_{i,j}\) 表示当前已经排了 \(i\) 列,状态为 \(j\) 的方案数,其中 \(1\) 表示该位置是一个跨了 \(i,i 阅读全文
posted @ 2025-10-27 19:15 长安一片月_22 阅读(30) 评论(1) 推荐(1)
摘要:有人让我写篇题解,那我就写吧。 下定义 \([1,n-m]\) 为特殊点,其余为普通点. 显然最终的联通块森林中,只可能有两类联通块: 由普通点构成的团(即无向完全图)。 以由特殊点构成的联通块为根,所有普通点向这个根连至少一条边。该联通块内部所有普通点之间随意连边。 只考虑第二种联通块。设 \(d 阅读全文
posted @ 2025-10-17 15:50 长安一片月_22 阅读(34) 评论(0) 推荐(1)
摘要:A CF833B 容易想到统计上一次出现该颜色的位置,然后维护 50 个支持区间加和全局最大值的线段树,用以优化 dp。 时间复杂度 \(O(nk\log n)\)。 #include<bits/stdc++.h> #define int long long using namespace std; 阅读全文
posted @ 2025-07-07 17:27 长安一片月_22 阅读(14) 评论(0) 推荐(0)
摘要:这道题似乎做法多得离谱,因为在学长链剖分,所以写一篇长链剖分题解。 容易发现假如 \(b\) 比 \(a\) 更加厉害,那么答案就是 \(\min(dep_a-1,k)\times(sz_a-1)\),考虑 \(a\) 比 \(b\) 更加厉害的情况。 我们设 \(f'_{u,i}\) 表示 \(\ 阅读全文
posted @ 2025-07-02 10:44 长安一片月_22 阅读(11) 评论(0) 推荐(0)
摘要:题目让求最大加权回路,容易想到插头 \(dp\)。其余的就很常规了。 #include<bits/stdc++.h> using namespace std; const int N=2205,M=105; int n,m,mp[N][M][10],c[M][10]; bool vis[N][M][ 阅读全文
posted @ 2025-04-06 08:48 长安一片月_22 阅读(13) 评论(0) 推荐(0)
摘要:注意到有可爱的相邻位置小限制,考虑对这个地方进行优化。 我们设 \(f_{i,j,s}\) 表示我们目前已经考虑了前 \(i\) 种数,已经加入了 \(j\) 个数到数列里,\(<i\) 且 \(\ge i-4\) 的数的状态为 \(s\),则有: \[f_{i,j,s}(\operatorname 阅读全文
posted @ 2025-03-30 20:25 长安一片月_22 阅读(25) 评论(0) 推荐(0)
摘要:显然的,假如把每队 \((u_i,v_i)\) 都连一条 \(u_i\to v_i\) 的边,那么一定会形成一棵树,但有外向边也有内向边,其中外向边的定义是从近 \(1\) 点连向远 \(1\) 点的边,内向边相反。 先考虑只有外向边的情况。显然 \(1\) 号必须最后抽,概率为 \(\frac{w 阅读全文
posted @ 2025-03-30 15:15 长安一片月_22 阅读(17) 评论(0) 推荐(0)
摘要:问题的关键在于赶谁下车、最早啥时候能赶。显然赶下去的人会形成多段区间。我们把司机也当成乘客,同时对于所有人按 \(d_i\bmod t\) 的值升序排序,就会发现: 假如我们在某一时间点想要赶 \(i\) 下车,下一个收费站前最后一个想喝水的人是 \(j\),那么我们一定会把 \([i,j]\) 这 阅读全文
posted @ 2025-03-29 16:19 长安一片月_22 阅读(11) 评论(0) 推荐(0)
摘要:哇,真的是神仙中的神仙题,很可怕很可怕。 首先显然的性质是答案与树形态无关,因为其它点肯定在原先的边上或点下,而显然此时答案与树的形态本身是没有关系的。 我们考虑对于最后的 \(k\) 个点做状压 \(dp\)。设 \(f_{i,s}\) 表示枚举到第 \(i\) 个数,最后 \(k\) 个点的祖先 阅读全文
posted @ 2025-03-26 18:03 长安一片月_22 阅读(50) 评论(0) 推荐(0)
摘要:显然的,一个优秀数列对应的所有良好数列,每一种数的数量都是相同的。考虑借助这一点进行 \(dp\)。 那么容易想到 \(dp\) 的三个维度:枚举到第 \(i\) 种数,目前已经加入了 \(j\) 个数,目前有 \(l\) 种良好数列。但是这根本无法转移,考虑进一步发掘性质。我们先做一个定义: 定义 阅读全文
posted @ 2025-03-26 10:55 长安一片月_22 阅读(12) 评论(0) 推荐(0)
摘要:很神秘很神秘qwq。 考虑正难则反:既然我们难以正向推导,何不转化为删边?既然我们难以直接算出答案,何不算出期望?于是我们便有了基础思路:设 \(f_i\) 表示假如子树 \(i\) 的父亲不得删去,那么随机排列能够删空子树 \(i\) 的概率是多少。那么答案显然是 \((n-1)!\prod\li 阅读全文
posted @ 2025-03-25 17:45 长安一片月_22 阅读(15) 评论(0) 推荐(0)
摘要:考虑神秘建树。我们将所有 \(B\) 向 \(A\) 连边,就会又双叒叕形成一棵以最后剩下的那个点为根的有根树。我们考虑每个点对于根节点的影响。 首先,发现每个点对父亲的贡献一定是 \(2x^i\) 或 \(-2x^i\),所以传递到根节点时,贡献即为 \(c_i2^{d_i}x^i\),其中 \( 阅读全文
posted @ 2025-03-25 14:39 长安一片月_22 阅读(17) 评论(0) 推荐(0)
摘要:发现两条线段 \((i,j),(k,l)\) 相交当且仅当两线段在数轴上相交但不包含。那么我们就将这个问题从圆上移到了数轴上。 我们设 \(dp_{i,j}\) 表示在区间 \([i,j]\) 内各点在内部随意连边,不能向外连边的情况下,\(i,j\) 在同一联通块内的方案数,那么不容易发现答案即为 阅读全文
posted @ 2025-03-25 09:25 长安一片月_22 阅读(38) 评论(0) 推荐(0)
摘要:成事不说,遂事不谏,既往不咎。(好久没写题解了,影响真的很大。) 阅读全文
posted @ 2025-03-24 17:56 长安一片月_22 阅读(24) 评论(0) 推荐(0)
摘要:首先对于一个边双连通分量,它一定有一个环,将这个无向环换成有向环,我们就构造出了一种可以使边双连通分量内任意两点都可互达的情况。 那么问题又一次来到了树的情况。注意力惊人的注意到最优策略一定是一堆点到一个点,一个点再到一堆点。直接简单树形 \(dp\) 结合简单 \(01\) 背包即可。 时间复杂度 阅读全文
posted @ 2025-03-11 10:52 长安一片月_22 阅读(13) 评论(0) 推荐(0)
摘要:容易发现一定能构造出一种正确答案,满足先横着走到头再向下走,或者先向下走再横着走到头是最长路。 那么可以想到枚举两头,背包中间的 \(O(n^4A)\) 做法。 我们可以继续注意力惊人的注意到左上和右下角一定是最小值和次小值,这样时间复杂度就骤减到 \(O(n^2V)\) 了。 #include<b 阅读全文
posted @ 2025-03-11 08:14 长安一片月_22 阅读(11) 评论(0) 推荐(0)
摘要:容易发现 \(k_i=0\) 时只有两种策略: 假如我这里不选,接下来不会再出现清空,且没有选入集合的集合为 \(T\),我们就让这个地方为 \(T\)。 否则早死比晚死好,直接原地起爆,清空集合。 显然第一种决策只会在最后连续出现,所以我们找到最长不重复后缀 \([r,n]\),那么这一段区域里最 阅读全文
posted @ 2025-02-21 21:38 长安一片月_22 阅读(7) 评论(0) 推荐(0)
摘要:这里是三道题。 这场比赛的 B 题是本题的前置题,他告诉我们: “假如当前区间右侧存在一个 \(k\),使得我们再不往右走就无法占领 \(k\),就向右走,否则向左。”是一种最优决策。 他甚至还慷慨地告诉我们: 最终的合法起始点集合要么为 \(x\in\bigcap\limits_{i=1}^n[i 阅读全文
posted @ 2025-02-21 20:23 长安一片月_22 阅读(20) 评论(0) 推荐(0)
摘要:我们考虑先将选的数之和 \(sum\) 转化到一定范围内,再进行背包 \(dp\),这样就可以减少时间空间复杂度了。 其他的都是简单多重背包,时间复杂度 \(O(m^3\log^2m)\),假如用单调队列写应该就是 \(O(m^3)\) 了。 #include<bits/stdc++.h> #def 阅读全文
posted @ 2025-02-21 12:02 长安一片月_22 阅读(14) 评论(0) 推荐(0)