03 2021 档案

摘要:VIII.[SDOI2008]Sandy的卡片 ……有什么意义吗…… 差个分,然后就是IV.[POI2000]公共串的内容了,套个单调队列,$O(n)$解决,假如你用DC3的话。 代码: #include<bits/stdc++.h> using namespace std; int all,n,m 阅读全文
posted @ 2021-03-31 16:58 Troverld 阅读(63) 评论(0) 推荐(0)
摘要:VII.[HAOI2016]找相同字符 第一道自己做出的SA题祭~~~ 实际上和上一题没啥区别的说…… 我们发现,这题实际上就是对于两个串中所有的后缀求$\operatorname\(之和(因为这两个后缀共有\)\operatorname$个前缀是相同的,即串中有这么多子串是相同的)。 老套路,俩串 阅读全文
posted @ 2021-03-31 16:57 Troverld 阅读(80) 评论(0) 推荐(0)
摘要:VI.[AHOI2013]差异 \(\sum\limits_{1\leq i<j\leq n}\text{len}(T_i)+\text{len}(T_j)-2\times\text{LCP}(T_i,T_j)\) 这个柿子可以拆成两部分,即 \(\sum\limits_{1\leq i<j\leq 阅读全文
posted @ 2021-03-31 16:55 Troverld 阅读(58) 评论(0) 推荐(0)
摘要:V.UVA11107 Life Forms 这题同上题类似,只不过把“在全部串中出现”变成了“在超过一半(即$\left\lfloor\dfrac{2}\right\rfloor+1$)个串中出现”。 这题中我的方法是上题中提到的“two-pointers+单调队列”算法。第一遍跑求出所有满足“出现 阅读全文
posted @ 2021-03-31 16:54 Troverld 阅读(73) 评论(0) 推荐(0)
摘要:IV.[POI2000]公共串 后缀数组如何应对多个串的情况呢? 答案很简单:把所有串都拼起来! 但这又有个问题,拼起来的串不会出现一些错误吗? 没关系,这里就有解决方案了:在相邻的串间插入一个从未出现过的字符。 我们考虑在拼起来的字符串中求出$ht$数组。则仍然考虑二分公共子串长度$ip$,在$h 阅读全文
posted @ 2021-03-31 16:52 Troverld 阅读(89) 评论(0) 推荐(0)
摘要:III.[USACO06DEC]Milk Patterns G 同上一题思路类似,我们仍然建出后缀数组。 考虑任何出现$k$次的子串,以它们作为前缀的后缀在$sa$数组中一定是连续的——这一点可以从上文中的$\text$直接看出,因为相邻的结果一定大于等于不相邻的结果。 因此我们只需要求出$ht$数 阅读全文
posted @ 2021-03-31 16:49 Troverld 阅读(76) 评论(0) 推荐(0)
摘要:II.[USACO5.1]乐曲主题Musical Themes 一个显然的思路就是差分,这样子在原数组中差相等,就转为差分数组中子串相同。 我们考虑建出后缀数组。 显然,这个答案可以二分,则我们二分一个长度$ip$。 考虑$ht$数组。我们在所有$ht_i<ip$的地方切一刀,将$ht$数组切成多段 阅读全文
posted @ 2021-03-31 16:48 Troverld 阅读(93) 评论(0) 推荐(0)
摘要:I.不同子串个数 后缀数组在处理子串问题时往往有奇效,因为后缀的前缀即是子串,而后缀数组正是按照前缀排序的后缀。 回到本题。因为后缀的前缀是子串,则一条后缀与其它所有后缀的LCP的最长长度,即是这条后缀的前缀子串中所有被重复计数的串的数量。 我们掏出求得的$ht$数组。初学SA时大家一定接触过一个重 阅读全文
posted @ 2021-03-31 16:47 Troverld 阅读(295) 评论(0) 推荐(0)
摘要:Prufer序列是一种神奇的东西,其可以实现无根树与序列间的双射,并且在计数题、DP题、找规律题等等问题中有着不俗的表现。 (另,大部分时候,Prufer及其误拼Purfer、Purfur、Prefer等奇奇怪怪的变体是被混用了的) 首先,一棵 \(n\) 个节点的树的Prufer序列,是一长度为 阅读全文
posted @ 2021-03-31 16:46 Troverld 阅读(238) 评论(0) 推荐(0)
摘要:这里是矩阵树定理学习笔记。线性代数基础详见线性代数学习笔记。 矩阵树定理是用来作生成树计数的好东西。其定理主要表述如下: 设 \(\mathbb{G}\) 为一无向图。则其无向无根生成树的数量,可以被如下算法求得: 设矩阵 \(S_1\),其中第 \(i\) 行第 \(j\) 列的数是 \((i,j 阅读全文
posted @ 2021-03-31 16:44 Troverld 阅读(242) 评论(0) 推荐(0)
摘要:XXVI.[AH2017/HNOI2017]单旋 先从单旋最小/大值的操作看起。手动模拟一下的话就会发现它对整棵树的形态几乎没有影响,就是断开最小值与它父亲的连边,并用其原本的右儿子(如果存在)替代。之后,将整棵树的根设作其新右儿子。最大值同理。 然后删除最小值也类似。注意删除一个原本就在树顶的最小 阅读全文
posted @ 2021-03-31 16:42 Troverld 阅读(116) 评论(0) 推荐(0)
摘要:XXV.Sasha and Algorithm of Silence's Sounds 假设我们把区间$[l,r]\(里的格子连出来,然后发现出现一个环,则我们可以肯定地说,所有具有\)[l,r]$作为子区间的区间,都是不合法的。 于是我们对于每个位置$l$,都可以找出其最右边的不成环的位置$r$。 阅读全文
posted @ 2021-03-31 16:37 Troverld 阅读(77) 评论(0) 推荐(0)
摘要:XXIV.CF482E ELCA Difficulty 3200的大神题。 这题维护应该很好想:与其维护所有对的LCA,不如维护一个数是多少对的LCA。显然,这个数量应该为$sz_x2-\sum\limits_{y\in son_x}sz_y2$。其中$sz_x$为$x$子树的大小,$son_x$为 阅读全文
posted @ 2021-03-31 16:35 Troverld 阅读(80) 评论(0) 推荐(0)
摘要:XXIII.CF603E Pastoral Oddities 结论1:只有点数为偶的连通块,才有可能使每个点的度数为奇。(偶连通块的必要性) 证明1:如果在奇连通块中,每个点的度数为奇,则总度数为奇,但是总度数必定是偶数(每条边增加两点度数),因此不可能存在奇的合法连通块。 结论2:任何点数为偶的连 阅读全文
posted @ 2021-03-31 16:34 Troverld 阅读(79) 评论(0) 推荐(0)
摘要:XXII.SP16580 QTREE7 - Query on a tree VII 它来了,它来了!LCT树套树的经典题,它来了! 虽然只是LCT套 std::multiset 而已 这题具体过程同QTREE6,不再赘述。唯一有区别的是,这题需要维护的是虚子树中最大值,不具有可减性。 因此,我们采用 阅读全文
posted @ 2021-03-31 16:32 Troverld 阅读(53) 评论(0) 推荐(0)
摘要:XXI.[ZJOI2016]大森林 论LCT的百种用法系列 这题有几个性质: 1.询问与时间无关。因为只是添加新点,原来点之间的位置关系不变。因此只要询问的两个点都被建出来了,何时进行询问并无影响。 2.操作重叠的部分很多。因为我们不管怎么加点,即使是加原树中没有的点,仍然有原来点之间的位置关系不变 阅读全文
posted @ 2021-03-31 16:30 Troverld 阅读(84) 评论(0) 推荐(0)
摘要:XX.SP16549 QTREE6 - Query on a tree VI 本题LCT全方面爆破树剖——无论是复杂度、码量、思维难度、代码难度,全都碾压树剖。并且,LCT容易模板化,但是树剖不容易——树剖搭配的线段树因题而异,而LCT只需要把$pushup$和$pushdown$稍微改改就可以直接 阅读全文
posted @ 2021-03-31 16:27 Troverld 阅读(97) 评论(0) 推荐(0)
摘要:XIX.首都 一句话题意:维护一棵森林,支持查询某棵树的重心以及所有树的重心的异或和。 众所周知,重心有如下性质:将两棵树之间连一条边后,新树的重心在原两棵树重心的连线上。 根据这一性质,我想了半天也没有想出来什么美妙的算法主要还是我splay没学好 首先,这道题正解有两个,一是LCT+启发式合并( 阅读全文
posted @ 2021-03-31 16:24 Troverld 阅读(75) 评论(0) 推荐(0)
摘要:XVIII.最小差值生成树 这题$m^2$暴力求最小生成树应该是过不去的……估计只有LCT能过去了。 然后就是同IV.[NOI2014]魔法森林一致的方法,排序之后暴力断边连边即可。 注意会有自环!!!虽然我也不知道为什么没判自环算我MLE…… 代码: #include<bits/stdc++.h> 阅读全文
posted @ 2021-03-31 16:23 Troverld 阅读(90) 评论(0) 推荐(0)
摘要:XVII.[SDOI2017]树点涂色 树剖和LCT学到最后实际上是殊途同归的……就比如说这题,可以用树剖,但是在操作$1$中借鉴了LCT的跳链思想;LCT则因为不能子树修改,按照dfs序需要建出线段树出来,实际上也就是树剖的思想了。 首先讲一下LCT写法。观察到任意时刻,任意一种颜色一定是一条深度 阅读全文
posted @ 2021-03-31 16:21 Troverld 阅读(89) 评论(0) 推荐(0)
摘要:XVI.二分图 /【模板】线段树分治 本题有两种做法。一是所谓的“正解”线段树分治,复杂度$O(n\log n\log k)$。思路比较简单,敲起来也简单,就是复杂度不太优秀。 代码: #include<bits/stdc++.h> using namespace std; #define lson 阅读全文
posted @ 2021-03-31 16:19 Troverld 阅读(97) 评论(0) 推荐(0)
摘要:XV.[USACO18FEB]New Barns P 这种东西应该怎么维护呢?这是子树最大值呀。 一种方法是用平衡树(例如 std::multiset )维护轻儿子长度集合。但是这种东西太麻烦,太恶心了。 考虑直径的性质。我们给出两条引理: 引理1:假如有一条直径$(p,q)$,那么树中任意一个点$ 阅读全文
posted @ 2021-03-31 16:17 Troverld 阅读(364) 评论(0) 推荐(0)
摘要:XIV.[BZOJ3159]决战 你们知道吗!把一行 #define int long long 写在了一行 int 的后面然后 debug 了一整天的崩溃你知道吗!!! 我恨不得罢免了自己! 言归正传。 从某种角度来说,这是我写的第一棵树套树!虽然是邪教般的LCT套splay 首先,除了翻转操作以 阅读全文
posted @ 2021-03-31 16:15 Troverld 阅读(84) 评论(0) 推荐(0)
摘要:XIII.[TJOI2015]旅游 我至今还记得做毒瘤树剖题和毒瘤线段树题时那一坨坨触目惊心的 pushup 和 pushdown …… 这题是可以用树剖做的。但是,我还是选择了LCT。 在每个节点,我们维护如下值: mx :子树最大值 mn :子树最小值 lmx :从左往右走,最大收益(即要求的东 阅读全文
posted @ 2021-03-31 16:13 Troverld 阅读(73) 评论(0) 推荐(0)
摘要:XII.[ZJOI2012]网络 这题还以为有什么高端做法呢,一看$C\leq 10$,这题就算结束了。 它的那个限制翻译成人话就是“无论何时,任何颜色的边总是构成一条条链”。然后换颜色就暴力连边断边即可。 代码: #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2021-03-31 16:11 Troverld 阅读(53) 评论(0) 推荐(0)
摘要:XI.[BJOI2014]大融合 终于来了……我们终于要用LCT来维护子树信息了。 因为我们看到,LCT是通过将原树拆成一堆链而起效的。在树链剖分中,我们通过dfs序来访问一棵子树;但是因为LCT的链是动态变化的,因此并没有一组固定的访问顺序。 那怎么办呢? 我们考虑最原始的想法:对于每个节点,再额 阅读全文
posted @ 2021-03-31 16:08 Troverld 阅读(99) 评论(0) 推荐(0)
摘要:X.[WC2006]水管局长 或许我这题应该放到V.[NOI2014]魔法森林前面的QaQ? 这题首先一眼看出翻转加边顺序。然后,动态维护最小生成森林,这样保证最小生成森林上的路径上的最大值就是原图中路径的最大值的可能的最小值。反正随便写写就行了。 代码: #include<bits/stdc++. 阅读全文
posted @ 2021-03-31 16:06 Troverld 阅读(56) 评论(0) 推荐(0)
摘要:IX.[BZOJ4998]星球联盟 这题就比较套路了(虽然我的程序还好好让我debug了一会),比上一题还要简单,直接暴力维护点双即可。 代码: #include<bits/stdc++.h> using namespace std; #define lson t[x].ch[0] #define 阅读全文
posted @ 2021-03-31 16:04 Troverld 阅读(103) 评论(0) 推荐(0)
摘要:VIII.[BZOJ2959]长跑 我想把出这么毒瘤的题的人拖出来揍一顿 这题稍微想想,就是动态维护点双连通分量并缩点,然后在缩出来的树上求两点距离。 思想简单但代码极其复杂。 首先,我们可以使用冰茶姬维护点双,所有的点全都并到一个冰茶姬中,除了冰茶姬的象征节点,其它的点一律全都删去,不保留任何信息 阅读全文
posted @ 2021-03-31 16:02 Troverld 阅读(72) 评论(0) 推荐(0)
摘要:VII.[SHOI2014]三叉神经树 LCT相较于树剖,最大的优势就是可以把一条链上的东西全整到一个splay里面,不像树剖在多个重链进行合并时会有很大麻烦。更好的是,LCT复杂度是$O(n\log n)$的,树剖不仅码量大,思路复杂,复杂度还是恶心的$O(n\log^2n)$。 这题就是典型的树 阅读全文
posted @ 2021-03-31 16:00 Troverld 阅读(116) 评论(0) 推荐(0)
摘要:VI.[SDOI2011]染色 你们知道吗?LCT考的就两个,一个$pushup$,一个$pushdown$。 这里就是经典的维护颜色段。在每个节点,我们维护四个值:\(lc\),左端颜色;\(rc\):右端颜色;\(sc\):区间颜色段数;\(col\):当前点的颜色。 然后就是经典的老套路了。 阅读全文
posted @ 2021-03-31 15:58 Troverld 阅读(73) 评论(0) 推荐(0)
摘要:V.[国家集训队]Tree II LCT维护这种东西是要比线段树要恶心的多的……毕竟线段树的区间大小是可以直接通过区间左右端点算出的,但是LCT就不行,必须手动维护。并且,线段树的维护是(左儿子+右儿子),但是LCT的维护是(左儿子+自己+右儿子)! 请务必先把线段树模板做掉,关于运算的优先级什么的 阅读全文
posted @ 2021-03-31 15:57 Troverld 阅读(69) 评论(0) 推荐(0)
摘要:IV.[NOI2014]魔法森林 前三题都是模板,是为了让我们练手的。 这题才是真正的挑战。 首先,一看这题既不加边也不删边,甚至连树都不是,还是道静态题,并且长得还贼像最小生成树,我就纳闷了,这是LCT? 还真是。 我们可以将边按照$a$排序。之后,我们维护一个关于$b$权值的动态最小生成树。 具 阅读全文
posted @ 2021-03-31 15:55 Troverld 阅读(91) 评论(0) 推荐(0)
摘要:III.[HNOI2010]弹飞绵羊 首先,可以发现,如果从一个装置的目标向这个装置连一条边,并且建立虚拟节点$n+1$,向所有可以弹飞的装置连边的话,这肯定构成一颗树。 理解就行。然后我们就可以在每个节点统计一个$size$,并用LCT在改变弹力系数时修改这棵树。则最终答案为: int ask(i 阅读全文
posted @ 2021-03-31 15:53 Troverld 阅读(62) 评论(0) 推荐(0)
摘要:II.[SDOI2008]洞穴勘测 也是近似的模板题,甚至比模板还要简单,连维护$pushup$都不需要。 主要是为了多敲几遍熟悉代码。 代码: #include<bits/stdc++.h> using namespace std; #define lson t[x].ch[0] #define 阅读全文
posted @ 2021-03-31 15:51 Troverld 阅读(66) 评论(0) 推荐(0)
摘要:LCT。 I.LCT可以干什么? 动态树问题, 是近几年在OI中兴起的一种新型问题, 是一类要求维护一个有根树森林, 支持对树的分割,合并等操作的问题。 由Robert E Tarjan为首的科学家们 提出解决算法Link-Cut Tree,简称LCT。 ——《百度百科》 算了,看看就行。 我们唯一 阅读全文
posted @ 2021-03-31 15:49 Troverld 阅读(106) 评论(0) 推荐(0)
摘要:这里是Kruskal重构树学习笔记。 Kruskal重构树,是用于求出有关一张图中,某点仅经过边权 \(\leq\) 某个值 \(v\) 的边所得到的子图的有关信息的工具。 但事实上,其应用还有更多。 我们先讲述其构造方法: 将所有边按照边权递增排序。 依次枚举每一条边。假如此时边的两个端点处于两个 阅读全文
posted @ 2021-03-31 15:47 Troverld 阅读(265) 评论(0) 推荐(0)
摘要:这里是集合幂级数学习笔记。 本博客在半年前就已经有计划去写了,只不过当时题目较少没能如愿。现在攒了几道题,开始动笔。 O.定义 定义 \mathsf 字体的函数为集合幂级数。例:\(\mathsf F(x),\mathsf G(x)\)。 定义 \mathbb 字体的变量表示集合。例:\(\math 阅读全文
posted @ 2021-03-31 15:45 Troverld 阅读(3878) 评论(4) 推荐(15)
摘要:CLVII.[LOJ#2372]「CEOI2002」臭虫集成电路公司 考虑轮廓线DP。因为有 \(3\times2\) 的矩形存在,所以要压两行。又因为两行的状态只有可能是 00,01,10 之一,所以压三进制。又因为卡空间,所以要滚动数组。时间复杂度 \(O(nm3^m)\)。 代码: #incl 阅读全文
posted @ 2021-03-31 15:44 Troverld 阅读(74) 评论(0) 推荐(0)
摘要:CLVI.CF868E Policeman and a Tree DP是很容易想的。但是如何设计状态呢? 一开始我自己假设了一个结论:在警察出发前,所有罪犯会排成此时的最优方案,然后不动;然后在警察抓到一个罪犯后,所有罪犯会再度排成最优方案,之后就一直不动了。但是如果这样做的话 \(50\) 的数据 阅读全文
posted @ 2021-03-31 15:42 Troverld 阅读(76) 评论(0) 推荐(0)
摘要:CLV.[AGC046D]Secret Passage 稍微观察一下就能发现,任一时刻,我们剩下的东西必然是一段定死了的后缀,加上一些可以任意塞位置的 \(0\) 与 \(1\)。考虑任意一个由上述时刻生成的串,就会发现它与该后缀的最长公共子序列长度即为后缀长度,且还剩余一些 \(0\) 与 \(1 阅读全文
posted @ 2021-03-31 15:40 Troverld 阅读(156) 评论(0) 推荐(1)
摘要:CLIV.[CODE FESTIVAL 2017 qual C]Three Gluttons 题解 阅读全文
posted @ 2021-03-31 15:39 Troverld 阅读(52) 评论(0) 推荐(0)
摘要:CLIII.[SDOI2017]切树游戏 设 \(f_{x,0,i}\) 表示 \(x\) 子树中,所有包含 \(x\) 且异或和为 \(i\) 的连通块数量,\(f_{x,1,i}\) 表示 \(x\) 子树中异或和为 \(i\) 的连通块数量。显然,有公式 \(f_{x,1,i}=f_{x,0, 阅读全文
posted @ 2021-03-31 15:38 Troverld 阅读(97) 评论(0) 推荐(0)
摘要:CLII.【模板】"动态 DP"&动态树分治 裸的树上最大独立集怎么做?设 \(f_{x,0}\) 表示在 \(x\) 子树中, \(x\) 不选的最大答案;\(f_{x,1}\) 表示在 \(x\) 子树中,\(x\) 选的最大答案。则有 \(f_{x,0}=\sum\limits_{y\in\t 阅读全文
posted @ 2021-03-31 15:37 Troverld 阅读(69) 评论(0) 推荐(0)
摘要:CLI.[ARC115E]LEQ and NEQ 设 \(f_{i,j}\) 表示位置 \(i\) 填 \(j\) 的方案数。则 \(f_{i,j}=\Big(\sum\limits_{k}f_{i-1,k}\Big)-f_{i-1,k}\)。于是我们便考虑线段树优化,只需要实现四种操作:整体求和, 阅读全文
posted @ 2021-03-31 15:36 Troverld 阅读(167) 评论(0) 推荐(0)
摘要:CL.[NOI2018] 冒泡排序 结论1.交换次数压到下界,当且仅当不存在长度大于 \(2\) 的下降子序列。 证明很简单。众所周知的是,冒泡排序的交换次数等于序列逆序对数。要压到下界,与每个点有关的逆序对数都只能为 \(|i-p_i|\),因为从 \(i\) 到 \(p_i\) 的过程中本身就要 阅读全文
posted @ 2021-03-31 15:34 Troverld 阅读(168) 评论(0) 推荐(0)
摘要:CIL.[NOI2020] 制作菜品 本题有三个难点:留意到题面中的 \(n-2\leq m\);证明;想到 bitset 优化。 首先,在很隐蔽的角落,有一句话 \(n-2\leq m\leq 5000\)。假如没看到这句话,就乖乖爆零罢。 结论1. \(m\geq n-1\) 时一定有解。 要证 阅读全文
posted @ 2021-03-31 15:32 Troverld 阅读(92) 评论(0) 推荐(0)
摘要:CXLVIII.[NOI2019] 机器人 首先发现每个点向左向右能到达的位置就类似笛卡尔树上一个点的代表区间,不同的是这里有多个最大值时选取最右的一个。于是我们可以想到一个DP,\(f_{[i,j],k}\) 表示区间 \([i,j]\) 的最大值恰为 \(k\) 或不大于 \(k\),两种设的方 阅读全文
posted @ 2021-03-31 15:31 Troverld 阅读(138) 评论(0) 推荐(0)
摘要:CXLVII.[NOI2016] 国王饮水记 首先,我们一定可以舍去那些高度比 \(h_1\) 还小的城市,并且将剩余的高度比 \(h_1\) 大的城市排序,使得 \(h_1\) 到 \(h_n\) 递增。 我们不妨从三座城市想起。假如可以合并两次,应该怎么合并? 先合并 \((1,2)\),再合并 阅读全文
posted @ 2021-03-31 15:29 Troverld 阅读(116) 评论(0) 推荐(1)
摘要:CXLVI.[十二省联考 2019]皮配 题解里”豌豆“的比喻实在太精妙了。 先重新描述一遍题意:有 \(n\) 个豆子,每个豆子有其重量,并位于某个豆荚内。每粒豆子颜色可以为黄色/绿色,表皮可以为皱皮/圆皮。每个豆荚里所有豆子的颜色必须相同。对于所有黄色/绿色/皱皮/圆皮的豆子,其重量和有一上界。 阅读全文
posted @ 2021-03-31 15:28 Troverld 阅读(261) 评论(0) 推荐(0)
摘要:CXLV.[九省联考2018]秘密袭击coat 首先先讲一种暴力但能过的方法。 很容易就会往每个值各被计算几次的方向去想。于是我们枚举每个节点,计算有多少种可能下该节点是目标节点。 为了避免相同的值的影响,我们在值相同的点间也决出一种顺序,即,若两个值相同的点在作比较,依照上文定下的那种顺序决定。 阅读全文
posted @ 2021-03-31 15:27 Troverld 阅读(66) 评论(0) 推荐(0)
摘要:CXLIV.[IOI2018] meetings 会议 被人坑了说这题是CDQ分治的题,一小时想不出来开了题解发现是道DP 大概不会有人像我一样一开始想了极其诡异的DP,然后发现可以用莫队+树剖优化到 \(O(n\sqrt{n}\log^2n)\),但是这复杂度估计比 \(n^2\) 还差…… 扯远 阅读全文
posted @ 2021-03-31 15:24 Troverld 阅读(86) 评论(0) 推荐(0)
摘要:CXLIII.[AGC013E] Placing Squares 关键是将问题从抽象的“正方形面积”转为具象的形式:一段长度为 \(d\) 的区间,有两个不同的小球要放进去,则总放置方案就是 \(d^2\),且不同的区间间方案是通过乘法原理结合的,刚好是题目中 \(\prod d^2\) 的形式。 阅读全文
posted @ 2021-03-31 15:23 Troverld 阅读(72) 评论(0) 推荐(0)
摘要:CXLII.CF1158F Density of subarrays 题解 阅读全文
posted @ 2021-03-31 15:22 Troverld 阅读(58) 评论(0) 推荐(0)
摘要:CXLI.[八省联考2018]林克卡特树 一眼发现函数是凸的。然后思考发现直接一个树形DP就能进行二分的check:设 \(f_{i,0/1/2}\) 分别表示节点 \(i\),其中 \(i\) 未被选/是一条链的链顶/被一条链经过,然后直接DP就行。 为什么二分边界要开到 \(10^{12}\) 阅读全文
posted @ 2021-03-31 15:19 Troverld 阅读(78) 评论(0) 推荐(0)
摘要:CXL.忘情 wqs二分水题,明显那个式子可以被化成 \((1+\sum x)^2\),于是可以斜率优化,然后又明显随着段数越分越多函数是凹的,于是可以简单wqs二分。时间复杂度 \(O(n\log n)\)。 需要注意的是,因为二分上界是 \(10^{18}\),所以得开 __int128。 代码 阅读全文
posted @ 2021-03-31 15:17 Troverld 阅读(93) 评论(0) 推荐(0)
摘要:CXXXIX.[AGC030F] Permutation and Minimum 看到 \(300\) 的数据范围,再加上计数题,很容易就往计数DP方向去想。 为方便,我们将 \(n\) 乘二。 因为是两个位置取 \(\min\),于是我们便想到从小往大把每个数填入序列。于是DP数组第一维的意义便出 阅读全文
posted @ 2021-03-31 15:16 Troverld 阅读(72) 评论(0) 推荐(0)
摘要:CXXXVIII.CF739E Gosha is hunting 因为 \(n\) 是 \(2000\),我们可以想出设一个二维状态来保证 \(n,a\) 这两维,然后再wqs二分 \(b\) 这一维。(明显,随着 \(b\) 越来越大,呈现一凸函数)。 时间复杂度 \(O(n^2\log n)\) 阅读全文
posted @ 2021-03-31 15:14 Troverld 阅读(74) 评论(0) 推荐(0)
摘要:CXXXVII.[国家集训队]Tree I 两年前刚学MST时做这题WA了,然后两年后才把它补上…… 明显直接wqs二分就行了。 代码: #include<bits/stdc++.h> using namespace std; int n,m,q,dsu[50100],ip; int read(){ 阅读全文
posted @ 2021-03-31 15:13 Troverld 阅读(70) 评论(0) 推荐(0)
摘要:CXXXVI.[IOI2000] 邮局 加强版 Observation 1. 若一段村庄中设一个邮局,则邮局一定设在其中位数(若是偶数则任一中位数)的位置。 Observation 2. 若令 \(w(l,r)\) 为区间 \((l,r)\) 中村庄设一个邮局的费用,则其满足四边形不等式。 Obse 阅读全文
posted @ 2021-03-31 15:11 Troverld 阅读(185) 评论(0) 推荐(0)
摘要:CXXXV.[ZOJ3989]Triangulation 神题。 这个数据范围很难不让人想到状压DP。于是我们考虑应该怎么设计状态。 考虑一组三角剖分的形态:其必定是在所有点所构成的凸包内部划分出很多三角形。这也就表明,任何一组三角剖分一定包含所有凸包上的边。 我们可以想到一个比较简洁的DP:设 \ 阅读全文
posted @ 2021-03-31 15:08 Troverld 阅读(105) 评论(0) 推荐(0)
摘要:CXXXIV.[BZOJ3864]Hero meet devil 我们不妨从最trival的LCS问题上想起:暴力的LCS求法是什么? 设 \(f(i,j)\) 表示一个串(不妨设为本题中要填的字符串 \(T\))的前 \(i\) 位与另一个串(即题目中给出的 \(S\))的前 \(j\) 位所构成 阅读全文
posted @ 2021-03-31 15:06 Troverld 阅读(60) 评论(0) 推荐(0)
摘要:CXXXIII.[HDU6094]Rikka with K-Match 依旧wqs二分。 首先,依据我们之前提到过的一个性质,“凡是可以表示成费用流模型的东西都有凹凸性”,本题也不例外,关于匹配个数的函数是凹的。 凹的就可以wqs二分。于是问题转换为最小权任意匹配。因为 \(m\) 只有 \(4\) 阅读全文
posted @ 2021-03-31 15:04 Troverld 阅读(150) 评论(0) 推荐(0)
摘要:CXXXII.[GYM102268J]Jealous Split wqs二分。 首先,先讲一下wqs二分的应用条件: 对于某个函数 \(f(x)\) 和一个特定的 \(x\),要求出 \(f(x)\) 的值的复杂度是不可接受的;但是,若满足 \(f\) 是上凸/下凹的,且对于一个给定的 \(k\), 阅读全文
posted @ 2021-03-31 15:03 Troverld 阅读(272) 评论(0) 推荐(1)
摘要:CXXXI.[GYM102331J]Jiry Matchings 首先,不难想到一个 \(O(n^2)\) 的树上背包:设 \(f_{i,0/1,j}\) 表示在以 \(i\) 为根的子树内,其中 \(i\) 没有被匹配/被匹配了,且整个子树中共匹配了 \(j\) 条边的最优方案。考虑优化。 我们知 阅读全文
posted @ 2021-03-31 15:02 Troverld 阅读(654) 评论(4) 推荐(2)
摘要:CXXX.[GYM102904B]Dispatch Money 考虑设 \(f_i\) 表示长度为 \(i\) 的前缀的最优划分。则我们发现,有 \(f_j+\operatorname{inversion}(j+1,i)\rightarrow f_i\),其中 \(\text{inversion}\ 阅读全文
posted @ 2021-03-31 14:59 Troverld 阅读(287) 评论(0) 推荐(0)
摘要:CXXIX.CF559E Gerald and Path 考虑将所有线段按照固定的那一端从小往大排序,并且对线段的端点离散化。 这之后,设 \(f_{i,j}\) 表示当前处理到线段 \(i\),且所有线段中最右的那根的右端点不右于位置 \(j\)(即可以在 \(j\) 左面或与 \(j\) 重合) 阅读全文
posted @ 2021-03-31 14:58 Troverld 阅读(78) 评论(0) 推荐(0)
摘要:CXXVIII.[AGC020E] Encoding Subsets 这种“压缩”题可以考虑区间DP。但是若考虑标准的区间的话它“子集”等定义又不好处理。 于是我们考虑对字符串作DP。设 \(f(S)\) 表示一个串 \(S\) 及其所有子集的压缩方案数。 显然,其有两种转移方式:一种是 \(S_0 阅读全文
posted @ 2021-03-31 14:56 Troverld 阅读(80) 评论(0) 推荐(0)
摘要:CXXVII.[GYM102822I]Invaluable Assets 引理1.最优解法下我们会尽量选取效果为 \(\sqrt{c}\) 的肥料。 考虑每袋肥料单位效果所需费用——此为 \(\dfrac{x^2+c}{x}\)。将分数拆开并套上均值,得到最大值在 \(\sqrt{c}\) 处取到。 阅读全文
posted @ 2021-03-31 14:55 Troverld 阅读(334) 评论(0) 推荐(0)
摘要:CXXVI.[GYM102832J]Abstract Painting 考虑将一个圆心为 \((x,0)\),半径为 \(R\) 的圆,转换为 \(x\) 轴上线段 \([x-R,x+R]\),问题转换为求无交的线段覆盖方案数。 因为所有的圆半径很小(\(5\)),所以我们考虑状压位置 \(i\) 阅读全文
posted @ 2021-03-31 14:53 Troverld 阅读(100) 评论(0) 推荐(0)
摘要:CXXV.[Topcoder16346]TwoPerLine 跟一年半以前就刷过的经典老题[AHOI2009]中国象棋完全一致,道理非常simple,设 \(f_{i,j,k}\) 表示DP到第 \(i\) 列,其中有 \(j\) 行内恰有 \(2\) 枚棋,\(k\) 行里恰有 \(1\) 枚棋, 阅读全文
posted @ 2021-03-31 14:51 Troverld 阅读(57) 评论(0) 推荐(0)
摘要:CXXIV.[GYM102155J]stairways 首先,考虑暴力 \(n^3\) DP——设 \(f_{i,j,k}\) 表示当前DP到第 \(i\) 个人,且第一条楼梯上到的最晚的人在时刻 \(j\) 到达,第二条楼梯在时刻 \(k\)。 然后,观察到 \(j,k\) 中至少有一个值为前缀 阅读全文
posted @ 2021-03-31 14:49 Troverld 阅读(152) 评论(0) 推荐(1)
摘要:CXXIII.CF612F Simba on the Circle 题解 阅读全文
posted @ 2021-03-31 14:45 Troverld 阅读(31) 评论(0) 推荐(0)
摘要:CXXII.CF913E Logical Expression 题解 阅读全文
posted @ 2021-03-31 14:43 Troverld 阅读(34) 评论(0) 推荐(0)
摘要:CXXI.[GYM100134I][NEERC2012]Identification of Protein debug5h,精神崩溃。 首先,很容易想到把所有东西都乘上 \(10^5\) 变成整数。然后,因为 \(\gcd(9705276,12805858)=2\),所以在字符串长度 \(\leq4 阅读全文
posted @ 2021-03-31 14:41 Troverld 阅读(114) 评论(0) 推荐(0)
摘要:CXX.CF917D Stranger Trees 这里是本题的DP解法。矩阵树定理解法详见矩阵树定理学习笔记中重题III.TopCoder13369-TreeDistance。 首先,一个基础结论是,如果一张 \(n\) 个点的图,被连成一棵森林,则继续加边连成一棵树的方案数是 \(n^{k-2} 阅读全文
posted @ 2021-03-31 14:39 Troverld 阅读(72) 评论(0) 推荐(0)
摘要:CXIX.[SHOI2009]舞会 之前一直在往二项式反演去想,没想到最后居然成了…… 我们考虑将男生和女生全部按照高度递减排序,则对于第$i$个男生,能与他构成特殊对的女生必定是一个前缀,设前缀长度为$num_i$。显然,$num_i$是单调不降的。 然后,我们考虑设$f_i$表示钦定$i$对匹配 阅读全文
posted @ 2021-03-31 14:38 Troverld 阅读(60) 评论(0) 推荐(0)
摘要:CXVIII.[BJOI2017]机动训练 这题的瓶颈,在于把 \(a_i^2\) 看作 \(\sum\limits_{i=1}^{a_i}\sum\limits_{j=1}^{a_i}1\),然后我们就可以看成“两两相同的机动路径都能贡献$1$”。于是我们设$f_{x1,y1,x2,y2}\(表示 阅读全文
posted @ 2021-03-31 14:36 Troverld 阅读(107) 评论(0) 推荐(0)
摘要:CXVII.[清华集训2012]串珠子 如果直接暴力上状压进行计数是会重复计算的;那么怎样不重不漏地计数呢? 我们发现,要求出连通图的数量是比较难的;但是要求出非联通图的数量是比较简单的,因为我们可以祭出套路。 我们设 \(f_i\) 表示 \(i\) 集合中所有图的数量(不管联通与否)。再设 \( 阅读全文
posted @ 2021-03-31 14:35 Troverld 阅读(58) 评论(0) 推荐(0)
摘要:CXVI.[COCI2014-2015#1] Kamp 一看题面,突然感觉很弱智,不就是求出以每个点为根到其它所有特殊点的距离之和吗?这不是随随便便换个根就完事了吗? 然后兴冲冲敲出来,一测样例全挂。 后来发现并不是这样的,因为车上可以同时搭载多人,且车最后可以就停在某个地方不回去了。 稍微想想可以 阅读全文
posted @ 2021-03-31 14:33 Troverld 阅读(128) 评论(0) 推荐(0)
摘要:CXV.[COCI2019]Mobitel 如果正着来DP的话,状态是 \(O(rsn)\) 的,不可能通过。 这时,我们就要应用一些数论知识了: 若 \(\prod a_i<n\), 则 \(\left\lfloor\dfrac{n-1}{\prod a_i}\right\rfloor\geq 1 阅读全文
posted @ 2021-03-31 14:32 Troverld 阅读(108) 评论(0) 推荐(0)
摘要:CXIV.[POI2014]ZAL-Freight 题解 阅读全文
posted @ 2021-03-31 14:31 Troverld 阅读(44) 评论(0) 推荐(0)
摘要:CXIII.[JLOI2016/SHOI2016]侦察守卫 神题。 见代码即可。 #include<bits/stdc++.h> using namespace std; int n,m,p,a[500100],f[500100][25],g[500100][25],res=0x3f3f3f3f; 阅读全文
posted @ 2021-03-31 14:29 Troverld 阅读(84) 评论(0) 推荐(0)
摘要:CXII.[CEOI2007]树的匹配Treasury 题解 阅读全文
posted @ 2021-03-31 14:27 Troverld 阅读(36) 评论(0) 推荐(0)
摘要:CXI.[九省联考2018]一双木棋chess 一下子就想到了LXX.[USACO5.5]贰五语言Two Five(可见刷题笔记II),因为同是阶梯型的图样。然后稍微想一想就发现总方案数可以用隔板法证得是$\dbinom{n+m}$的,代入一看发现才$2\times10^5$都不到。于是就果断DP了 阅读全文
posted @ 2021-03-31 14:25 Troverld 阅读(73) 评论(0) 推荐(0)
摘要:CX.[POI2015]MOD 比较恶心的题目。 首先,有一个结论,即如果把两棵树通过某种方式连接起来,新树的直径的端点一定来自于原本两棵树的直径端点集合。 则考虑新树的最大直径,明显就是把两棵树的直径直接连一块,就是两棵树的直径之和再加一。 考虑新树的最小直径,则应该选择两树直径的中点(如果直径长 阅读全文
posted @ 2021-03-31 14:23 Troverld 阅读(67) 评论(0) 推荐(0)
摘要:CIX.[NOI Online #1 入门组]魔法 我们可以构造出原图的转移矩阵 \(A\),表示只走原图的边的代价。这个直接暴力上Floyd即可。 我们还可以构造出魔法的转移矩阵$B$。 则,可以想到,答案一定是 \(ABABABABAB\dots ABA\) 这种样子。 故我们用$B$左乘$A$ 阅读全文
posted @ 2021-03-31 14:21 Troverld 阅读(71) 评论(0) 推荐(0)
摘要:CVIII.[POI2014]MRO-Ant colony 根据下取整除法的性质(\(\left\lfloor\dfrac{\left\lfloor\dfrac{x}{y}\right\rfloor}{z}\right\rfloor=\left\lfloor\dfrac{x}{yz}\right\r 阅读全文
posted @ 2021-03-31 14:20 Troverld 阅读(63) 评论(0) 推荐(0)
摘要:CVII.[NOI2009]二叉查找树 首先该树的中序遍历是唯一可以确定的(直接按照数据值排序即可)。 然后,因为权值可以被修改成一切实数,故我们完全可以把权值离散化掉。 于是我们现在可以设置一个DP状态$f[l,r,lim]$表示: 区间$[l,r]$中的所有东西构成了一棵子树,且树中最小权值不小 阅读全文
posted @ 2021-03-31 14:18 Troverld 阅读(87) 评论(0) 推荐(0)
摘要:CVI.[CSACADEMY]Root Change 常规换根DP。设 \(f_i\) 表示 \(i\) 子树中以 \(i\) 为起点的最长路径长度,设 \(sz_i\) 表示 \(i\) 子树中边的数量,再设 \(g_i\) 表示 \(i\) 子树的答案。 则 \(f\) 和 \(sz\) 显然很 阅读全文
posted @ 2021-03-31 14:16 Troverld 阅读(56) 评论(0) 推荐(0)
摘要:CV.[ARC067D] Yakiniku Restaurants 明显在最优方案中,行走方式一定是从一条线段的一端走到另一端,不回头。 于是设 \(f[i,j]\) 表示从 \(i\) 走到 \(j\) 的最优代价。明显,该代价对于不同的券相互独立。故我们依次考虑每一张券。 我们发现,假设有一张位 阅读全文
posted @ 2021-03-31 14:15 Troverld 阅读(53) 评论(0) 推荐(0)
摘要:CIV.[TopCoder 12519]ScotlandYard 我们考虑一个最原始的DP状态:$f[\mathbb]\(表示根据当前给出的信息,猜的人可以推测出当前藏的人一定在且仅在集合\)\mathbb$之中时,藏的人最多可以走多少步。 然后考虑枚举藏的人下一步给出走了什么颜色的边,然后取$\m 阅读全文
posted @ 2021-03-31 14:13 Troverld 阅读(117) 评论(0) 推荐(0)
摘要:CIII.[APIO2014]连珠线 一般的换根DP题。 明显可以看出,最终的树一定可以通过指定一个根变成一棵有根树,所有的蓝边都可以被分成两两一组,其中每组中两条边深度递增。 于是我们可以设置DP状态。$f_{x,0/1}$表示节点$x$,它不是/是某对蓝边的中间节点时,子树中最大的蓝边权和。 简 阅读全文
posted @ 2021-03-31 14:11 Troverld 阅读(77) 评论(0) 推荐(0)
摘要:CII.HDU6212 Zuma 一眼区间DP。 首先,我们将串压缩(即将相同颜色的相邻珠子合并)。记$col_i$为位置$i$的颜色,$sz_i$为位置$i$的珠子数。 我们设$f[i,j]\(表示消去区间\)[i,j]$中所有东西的最小步数。 则有: \(f[i,j]=\min\begin{ca 阅读全文
posted @ 2021-03-31 14:10 Troverld 阅读(88) 评论(0) 推荐(0)
摘要:CI.[IOI2009]salesman 思想非常simple:因为一次从上游往下游的转移,可以被表示成 \(f_i+(pos_i-pos_j)\times U\rightarrow f_j\ |\ pos_i<pos_j\land tim_i<tim_j\) 拆开括号,即可得到两半互不相关的部分。 阅读全文
posted @ 2021-03-31 14:09 Troverld 阅读(167) 评论(0) 推荐(0)
摘要:C.[POI2013]BAJ-Bytecomputer 首先先说猜想:最终序列中所有数都是$-1,0,1$,且不存在先改后面,后改前面的状态。 有了这个猜想,就可以DP了。我们设$f_{i,j}$表示要使位置$i$出现数$j$,且前$i$个位置单调不降的最小费用。则我们枚举往$a_{i+1}$上加多 阅读全文
posted @ 2021-03-31 14:07 Troverld 阅读(108) 评论(0) 推荐(0)
摘要:IC.[POI2007]ATR-Tourist Attractions 这题我一年半之前初学状压DP时就写了份没卡空间的做法,今天终于A了…… 首先,思路非常简单——我们可以使用Dijkstra预处理出来$2\sim k+1$中两两点之间的距离以及它们到$1$和$n$的距离。接着,设$f[i,j]$ 阅读全文
posted @ 2021-03-31 14:06 Troverld 阅读(121) 评论(0) 推荐(0)
摘要:LCVIII.[POI2006]PRO-Professor Szu 我要举报……本题数据与题面不符(事实上我已经举报了……),会有到不了主楼的情形,要特别考虑。 思路很简单,我们跑SCC缩点。假如一个SCC内部有自环,显然可以一直绕自环,故答案是无限;同时,所有可以走到该SCC的其它点答案都是无限。 阅读全文
posted @ 2021-03-31 14:04 Troverld 阅读(64) 评论(0) 推荐(0)
摘要:LCVII.[POI2013]LUK-Triumphal arch 明显题目具有可二分性。 考虑如何check。 我们发现,一个足够聪明的B,必定不会走回头路。故最终结果一定是一条从根到某个叶子的路径。 我们发现,如果一个父亲已经染掉了它所有儿子,它剩余的操作次数便可以去染儿子,以防到了某个儿子的时 阅读全文
posted @ 2021-03-31 14:03 Troverld 阅读(59) 评论(0) 推荐(0)
摘要:LCVI.[HNOI2007]梦幻岛宝珠 好题。 明显它是01背包的模型,但值域过大。咋办呢? 我们考虑令 \(f_{i,j}\) 表示只考虑 \(a\times 2^i\) 类型的物品,关于 \(a\) 做的一个背包。显然,暴力求出这个东西的时空复杂度都是可接受的。 我们再考虑 \(g_{i,j} 阅读全文
posted @ 2021-03-30 20:13 Troverld 阅读(76) 评论(0) 推荐(0)
摘要:LCV.[SDOI2008]山贼集团 题解 阅读全文
posted @ 2021-03-30 20:11 Troverld 阅读(48) 评论(0) 推荐(0)
摘要:LCIV.[NOI2005]瑰丽华尔兹 思路1.$O(N^2T)$暴力DP——设$f[t,i,j]$表示$t$时刻在位置$(i,j)$时的最长路径。显然会T。 思路2.$O(N^2T)$暴力DP——观察到一段长为$len$的时间内向某个方向每时刻移动一格,等价于总共移动$len$格。又因为随时可以停 阅读全文
posted @ 2021-03-30 20:09 Troverld 阅读(80) 评论(0) 推荐(0)
摘要:LCIII.[CERC2014]Outer space invaders 一种错误的思路是观察到一定可以构造出一种最优状态使得每次射击都发生在外星人消失的时刻,然后就将所有外星人按照消失时刻排序并设$f[i,j]$表示在第$i$个外星人消失的时刻如果你开了一炮高为(离散化后)$j$的最小费用——但很 阅读全文
posted @ 2021-03-30 20:07 Troverld 阅读(70) 评论(0) 推荐(0)
摘要:LCII.GYM102082E Eulerian Flight Tour (原题是PDF,没有题面的直接页面,就放一个vjudge的链接罢) 首先,当$n$是奇数时,完全图一定是欧拉图,故直接全连即可。 当$n$是奇数时,原图是欧拉图等价于补图上每个节点的度数都为奇。每个节点度数都为奇的充分必要条件 阅读全文
posted @ 2021-03-30 20:06 Troverld 阅读(102) 评论(0) 推荐(0)
摘要:LCI.CF979E Kuro and Topological Parity 我们考虑在一张染色完成的图里,我们连上了一条边,会有何影响? 在同色节点间连边——明显不会有任何影响 在异色节点间连边,但是出发点是个偶点(即有偶数条路径以其为终点的节点)——终点的路径数增加了,但增加的是偶数,故也无影响 阅读全文
posted @ 2021-03-30 20:03 Troverld 阅读(77) 评论(0) 推荐(0)
摘要:LC.CF GYM100739J.Longest cheap palindrome 我们设$f[i,j,k,l,r]$表示: 当前左端取到了位置$i$,右端取到了位置$j$; 当前选择的子序列长度为$k$; 区间$[i,l],[r,j]$中所有字符都被选择时,最小要付出的代价。 转移很简单,枚举左右 阅读全文
posted @ 2021-03-30 20:00 Troverld 阅读(48) 评论(0) 推荐(0)
摘要:LXXXIX.CF288E Polo the Penguin and Lucky Numbers 题解 阅读全文
posted @ 2021-03-30 19:58 Troverld 阅读(35) 评论(0) 推荐(0)
摘要:LXXXVIII.CF543D Road Improvement 常规换根DP题。 我们可以设$f_i$表示以$i$为根的子树中的方案数。则有转移式 \(f_i=\prod\limits_{j\in son_i}(f_j+1)\) 其中$+1$的意思是将边$(i,j)$留作坏边。 显然换根DP就很好 阅读全文
posted @ 2021-03-30 19:56 Troverld 阅读(105) 评论(0) 推荐(0)
摘要:LXXXVII.CF938F Erasing Substrings 一个naive的想法是设$f_{i,j}\(表示在位置\)[1,i]$中,我们删去了长度为$2k(k\in j)$的一些串,所能得到的最小字典序。使用二分+hash可以做到$O(n2\log^2 n)$,无法承受。 发现对于状态$f 阅读全文
posted @ 2021-03-30 19:54 Troverld 阅读(69) 评论(0) 推荐(0)
摘要:LXXXVI.CF295D Greg and Caves 题解 阅读全文
posted @ 2021-03-30 19:52 Troverld 阅读(31) 评论(0) 推荐(0)
摘要:XXXV.CF401D Roman and Numbers 思路: 我们设$num_i$表示$n$中出现了多少个数字$i$。然后就可以设$f[i][j]$表示当填入数字的状态是$i$,且当前数$%m$的余数是$j$时的方案数。则直接转移即可。 复杂度$O(18*2^{18}*m)$。 代码: #in 阅读全文
posted @ 2021-03-30 19:50 Troverld 阅读(71) 评论(0) 推荐(0)
摘要:LXXXIV.CF51F Caterpillar 也不知道算不算DP,反正就放这吧。 首先我们很轻松就能想到关于“环”,或者进一步地说,“边双连通分量”。因为最终图中不能有环,所以每个边双肯定最终会被缩成一个点。那么我们就也来缩一下。 在缩点之后,我们便得到了一片森林。 很明显对于每一棵树,我们都应 阅读全文
posted @ 2021-03-30 19:48 Troverld 阅读(65) 评论(0) 推荐(0)
摘要:LXXXIII.CF261D Maxim and Increasing Subsequence 首先,我们可以发现,当这个重复次数很大的时候,答案就等于序列中出现的不同权值个数。实际上,这个“很大”就可以被当作“大于等于不同权值个数”。 不同权值个数实际上是$\min(n,m)$级别的,其中$n$是 阅读全文
posted @ 2021-03-30 19:47 Troverld 阅读(91) 评论(0) 推荐(0)
摘要:LXXXII.UOJ#11. 【UTR #1】ydc的大树 很明显,如果我们令一个黑点$x$为树根,设它的“好朋友”集合为$\mathbb\(,则路径\)(x,\operatorname{\mathbb})$中所有白节点均可以使$x$不开心。这个可以用树上差分来进行路径加。现在关键是求出$\oper 阅读全文
posted @ 2021-03-30 19:46 Troverld 阅读(92) 评论(0) 推荐(0)
摘要:LXXXI.CF1312G Autocompletion 题解 阅读全文
posted @ 2021-03-30 19:44 Troverld 阅读(48) 评论(0) 推荐(0)
摘要:LXXX.[AGC024E] Sequence Growing Hard 首先,我们肯定能想到从第一个序列开始,依次加入一个新数得到下一个序列,同时还要保证字典序递增。我们如果让新数递增的话,就可以DP了。 我们首先观察往一个序列中加入一个不大于最大值的数会有多少种可能: 我们在$1323$中加入一 阅读全文
posted @ 2021-03-30 19:42 Troverld 阅读(92) 评论(0) 推荐(0)
摘要:LXXIX.[AGC013D] Piling Up 一个很naive的思路就是设$f[i][j]$表示当前进行了$i$步,并且盒子中剩下了$j$个白球的方案数,然后直接DP即可。 但是这样是有问题的——它没有考虑到重复计算的问题。 我们不妨令$+\(符号表示取出黑球,\)-$符号表示取出白球。 则一 阅读全文
posted @ 2021-03-30 19:39 Troverld 阅读(160) 评论(0) 推荐(0)
摘要:LXXVIII.[USACO12OPEN]Bookshelf G 转移很简单,直接设$f[i]$表示前$i$个位置书架的最小高度和即可。 考虑转移。 我们有暴力的公式 \(f[i]=\min\limits_{j=1}^{i}\Big\{f_{j-1}+\max\{h_j,\dots,h_i\}\Bi 阅读全文
posted @ 2021-03-30 19:36 Troverld 阅读(88) 评论(0) 推荐(0)
摘要:LXXVII.[CmdOI2019]任务分配问题 这道题与LXI.CF868F Yet Another Minimization Problem长得很像。实际算法也类似。 首先,题意就是把所有数划分成$k$段,使得每段内部正序对数量之和最少。设$w(i,j)\(表示区间\)(i,j)$内部正序对数量 阅读全文
posted @ 2021-03-30 19:34 Troverld 阅读(88) 评论(0) 推荐(0)
摘要:LXXVI.高速公路 简直恶心到爆炸…… 首先,暴力的DP是非常简单的。设$dis_x$表示位置$x$到根的距离,则有 \(f_x=\min\limits_{y\text{ is an ancestor of }x}f_y+p_x(dis_x-dis_y)+q_x\) 暴力一敲,期望得分$40%$。 阅读全文
posted @ 2021-03-30 19:33 Troverld 阅读(63) 评论(0) 推荐(0)
摘要:LXXV.[USACO20FEB]Help Yourself G 思路: 考虑将线段按照左端点排序。 设$f[i]$表示前$i$个线段的复杂度之和。 则$f[i]=2*f[i-1]+2^{sum[l_i-1]}$。其中$sum_i$是右端点$\leq i$的线段数目,$l_i$是$i$线段的左端点。 阅读全文
posted @ 2021-03-30 19:31 Troverld 阅读(61) 评论(0) 推荐(0)
摘要:LXXIV.[USACO18DEC]Sort It Out P 集合中的数一定是某一条LIS的补集,这点还是比较好想的。 我们要集合的字典序最小,就是让集合的补集的字典序最大。 最大就可以考虑按位处理LIS中的数。 我们从后往前求LIS。我们设$f[i]$表示以当前位置开头的LIS的长度以及数量(类 阅读全文
posted @ 2021-03-30 19:29 Troverld 阅读(70) 评论(0) 推荐(0)
摘要:LXXIII.[USACO19DEC]Greedy Pie Eaters P 考场上写了个暴力贪心(因为看到题面中的 greedy ……)然后光荣爆炸…… 因为$n\leq 300$,考虑区间DP。 设$f[i][j]\(表示有且只有区间\)[i,j]\(里的\)\pi$被吃完后的最大收益。 则我们 阅读全文
posted @ 2021-03-30 19:28 Troverld 阅读(158) 评论(0) 推荐(0)
摘要:LXXII.[HEOI2016/TJOI2016]序列 说实话我对于这道题应该归到DP还是树套树时曾经纠结了很久 我们回忆一下正牌的LIS: 对于$\forall j<i\ \land\ a_j\leq a_i$,$f[i]$可以从$f[j]$转移过来。 现在,我们设$mx_i,mn_i$分别表示位 阅读全文
posted @ 2021-03-30 16:54 Troverld 阅读(62) 评论(0) 推荐(0)
摘要:LXXI.[ABC163F]path pass i 思路: 反向考虑。我们计算出不包含任何颜色为$i$的节点的路径的数量,再用总路径数一减就行。 则,我们删去所有颜色为$i$的节点,整棵树就会被分成许多连通块。则不经过任何一个颜色为$i$的节点的路径数量,就是$\sum\dfrac{(\text{连 阅读全文
posted @ 2021-03-30 16:53 Troverld 阅读(130) 评论(0) 推荐(0)
摘要:LXX.[USACO5.5]贰五语言Two Five 这题已经在我的收藏夹里面吃了大半年的灰了 发现当表格填到某个地方后,它一定是呈现出一条逐行递减的轮廓线的。 因此,我们设$f[a][b][c][d][e]$表示第$1$行填了$a$个……第$5$行填了$e$个的方案数。 则只有$5\geq a\g 阅读全文
posted @ 2021-03-30 16:52 Troverld 阅读(83) 评论(0) 推荐(0)
摘要:LXIX.[USACO18JAN]Stamp Painting G 思路: 发现任何具有一段长度大于等于$K$的相同颜色区间的串都是合法的(这个区间被看作最后一次染色的目标)。 因此反向思考,我们求出所有不具有长度大于等于$k$的相同颜色区间的串数量,然后用总数量(\(M^N\))减一下即可。 我们 阅读全文
posted @ 2021-03-30 16:47 Troverld 阅读(105) 评论(0) 推荐(0)
摘要:LXVIII.[USACO17JAN]Subsequence Reversal P 思路: 发现,翻转一个子序列,就意味着两两互换子序列里面的东西。 于是我们就可以设$f[l][r][L][R]\(表示:\)\max[1,l)=L,\min(r,n]=R$时的最长长度。 则边界为:$L>R$时,\( 阅读全文
posted @ 2021-03-30 16:45 Troverld 阅读(52) 评论(0) 推荐(0)
摘要:LXVII.[USACO15JAN]Moovie Mooving G 思路1. 设$f[i][S]$表示在第$i$场(注意是场,不是部)电影时,已经看了$S$里面的电影是否合法。 然后贪心地取$|S|$最小的状态保存。光荣MLE了,\(21\%\)。 代码: #include<bits/stdc++ 阅读全文
posted @ 2021-03-30 16:44 Troverld 阅读(71) 评论(0) 推荐(0)
摘要:LXVI.[USACO09MAR]Cleaning Up G $n^2$的DP非常eazy,考虑如何优化。 首先,答案一定是$\leq n$的,因为一定可以每一个数单独划一组,此时答案为$n$。 则一组里面最多只能有$\sqrt$个不同的数,不然平方一下就超过$n$了。 因此我们可以设$pos_i$ 阅读全文
posted @ 2021-03-30 16:42 Troverld 阅读(76) 评论(0) 推荐(0)
摘要:LXV.[USACO20OPEN]Sprinklers 2: Return of the Alfalfa P 首先,一个合法的方案,肯定是有一条从左到右向下延伸的轮廓线: 例如: 其中,蓝色系格子是玉米,红色系格子是苜蓿;浅蓝色位置必须放玉米喷射器,深红色格子必须放苜蓿喷射器。深蓝和浅红格子放不放均 阅读全文
posted @ 2021-03-30 16:41 Troverld 阅读(65) 评论(0) 推荐(0)
摘要:LXIV.CF1059E Split the Tree 我们假设对于每个位置,已经求出了它可以往上延伸的长度$len[x]$,然后考虑DP。 设$g[x]$表示子树被分完后的最小边的数量。再设$f[x]$表示当这个数量最小时,点$x$能够往上延伸的最长长度。 这运用了贪心的思想:因为$g[x]$少一 阅读全文
posted @ 2021-03-30 16:39 Troverld 阅读(54) 评论(0) 推荐(0)
摘要:LXIII.CF1029E Tree with Small Distances 我们发现,如果一个点与$1$连了边,那么它的儿子们以及它的父亲都会变成合法的。 因此我们可以设$f[i][0/1/2]$表示:$i$的某个儿子中有边/$i$自己有边/$i$的父亲应该有边的最小值。 转移: \(0\):可 阅读全文
posted @ 2021-03-30 16:38 Troverld 阅读(50) 评论(0) 推荐(0)
摘要:LXII.CF908D New Year and Arbitrary Arrangement 思路: 期望题果然还是恶心呀…… 我们设$f[i][j]$表示当串中有$i$个a和$j$个ab时的方案数。为了方便,设$A=\dfrac{P_a+P_b},B=\dfrac{P_a+P_b}$。 显然,可以 阅读全文
posted @ 2021-03-30 16:37 Troverld 阅读(113) 评论(0) 推荐(0)
摘要:LXI.CF868F Yet Another Minimization Problem 这种题一般来说只有决策单调性一种优化方法。不过,决策单调性可以有很多种应用,例如单调队列或是斜率优化。这题可以选择比较少见的分治优化。 明显,可以设$f[i][j]$表示前$i$个位置分成$j$段的最大收益。显然 阅读全文
posted @ 2021-03-30 16:35 Troverld 阅读(82) 评论(0) 推荐(0)
摘要:LX.CF837D Round Subset 思路: 设$f[l][i][j][k]$表示: 前$l$位,选出$j$个,这$j$个物品能否拥有$j$个$5$和$k$个$2$(bool型) 接下来开始削减位数。 第一维可以直接$01$背包掉。现在只剩$f[i][j][k]$三维。 因为这是bool,我 阅读全文
posted @ 2021-03-30 16:32 Troverld 阅读(82) 评论(0) 推荐(0)
摘要:LIX.CF815C Karen and Supermarket 思路:一看就是树DP。 设$f[i][j][0/1]$表示: 在以$i$为根的子树中,选了$j$个物品,并且从$i$到$1$的路径上的点 没有/有 全部选上的最小花费。 则初始$f[i][0][0]=0$,\(f[i][1][1]=c 阅读全文
posted @ 2021-03-30 16:31 Troverld 阅读(137) 评论(0) 推荐(0)
摘要:LVIII.CF767C Garland 有两种可行方法: 对于一个点,它存在两个儿子,使得这两个儿子的子树中个存在一棵子树,它们的$size$都是$1/3$。 对于一个点,它的$size$是$2/3$,并且它的子树中存在一个子树,它的$size$是$1/3$。 然后我们只需要对于每个节点记录$ha 阅读全文
posted @ 2021-03-30 16:29 Troverld 阅读(70) 评论(0) 推荐(0)
摘要:LVII.CF809D Hitchhiking in the Baltic States 设$f_i$表示长度为$i$的LIS结尾的最小值。为了方便,设$g_i$表示前一个物品的$f_i$(即滚动数组); 则对于一个$[l,r]$的物品: 对于$g_<l$的位置,有$f_i=\max(g_i,l)$ 阅读全文
posted @ 2021-03-30 16:28 Troverld 阅读(49) 评论(0) 推荐(0)
摘要:LVI.CF633F The Chocolate Spree 奇奇怪怪的直径题 思路1.用多种东西拼出来直径 我们设$f[i][0/1/2/3]$表示: \(0\):子树内一条路径的最大值 \(1\):子树内两条路径的最大值 \(2\):子树内一条路径,且起点为$x$的最大值 \(3\):子树内两条 阅读全文
posted @ 2021-03-30 16:27 Troverld 阅读(96) 评论(0) 推荐(0)
摘要:LV.CF621E Wet Shark and Blocks 一眼,\(b\leq 10^9\),矩阵快速幂。 再一眼,\(x\leq 100\),$x^3$刚好,因此可以矩乘; 然后每个块里面的东西都是一样的,仍然可以矩乘; 然后OK。 代码: #include<bits/stdc++.h> us 阅读全文
posted @ 2021-03-30 16:26 Troverld 阅读(74) 评论(0) 推荐(0)
摘要:LIV.CF559C Gerald and Giant Chess DP只要一与排列组合或是容斥等等东西结合在一起就会变得极其毒瘤…… 我们设$f_i$表示:走到第$i$个黑格子上,且之前没有走到任何一个黑格子时的方案数。 则我们如果将棋盘的右下角看作是第$n+1$个黑格子,$f_{n+1}$就是答 阅读全文
posted @ 2021-03-30 16:24 Troverld 阅读(63) 评论(0) 推荐(0)
摘要:LIII.CF285E Positions in Permutations 神题orz…… 我也是第一次听说有个叫二项式反演的神奇东西…… 它具体有两个形式: \(F(n)=\sum\limits_{i=0}^n(-1)^i\dbinom{n}{i}G(i)\Leftrightarrow G(n)= 阅读全文
posted @ 2021-03-30 16:23 Troverld 阅读(84) 评论(0) 推荐(0)
摘要:LII.CF264B Good Sequences 状态很显然。设$f[i]$表示位置$i$的最长长度。 关键是转移——暴力转移是$O(n^2)$的。我们必须找到一个更优秀的转移。 因为一个数的质因子数量是$O(\log n)$的,而只有和这个数具有相同质因子的数是可以转移的; 因此我们可以对于每个 阅读全文
posted @ 2021-03-30 16:22 Troverld 阅读(101) 评论(0) 推荐(0)
摘要:LI.CF115E Linear Kingdom Races 思路1. 设$f[i][j]$表示: 当前DP到第$i$位,且最右边的一个没有修的路是第$j$条路,的最大收益。 则有 \(f[i][i]=\max\limits_{j=0}^{i-1}f[i-1][j]\) 这是在$i$号路不修的情况。 阅读全文
posted @ 2021-03-30 16:21 Troverld 阅读(101) 评论(0) 推荐(0)
摘要:L.CF53E Dead Ends \(n\leq 10\),我还是第一次见到这么小的状压…… 我们设$f[S][s]$表示:将集合$S$内的点连成一棵树,且集合$s$里的节点是叶子节点的方案数。 则有$f[S\cup{j}][{s\setminus i}\cup{j}]+=f[S][s],i\in 阅读全文
posted @ 2021-03-30 16:20 Troverld 阅读(78) 评论(0) 推荐(0)
摘要:IL.CF24D Broken robot DP必须要有方向性。没有明确顺序的DP都是在耍流氓。这就是为什么有“树上DP”和“DAG上DP”而没有“图上DP”,图上有环就不知道应该按什么顺序做了!(像是基环树DP和仙人掌DP都是缩点了,因此顺序还是确定的;环形DP也有“断环成链”的trick)。 那 阅读全文
posted @ 2021-03-30 16:19 Troverld 阅读(94) 评论(0) 推荐(0)
摘要:XLVIII.CF11D A Simple Task 我感觉状压DP是所有DP中最能玩出花的那一种……因为状态保存下来了因此什么奇奇怪怪的限制都能满足。 比如说这题。 一个环可以看作一条首尾相接的路径。我们可以设$f[S][j]$表示:在集合$S$中的点构成了一条路径,且路径的起点为$j$的方案数。 阅读全文
posted @ 2021-03-30 16:17 Troverld 阅读(59) 评论(0) 推荐(0)
摘要:XLVII.CF906C Party DP是门艺术。 $n\leq 22$一眼状压。但是怎么状压就比较困难,因为同一个$f[x]$可以代表成千上万种含义。 这里我们采用,设$f[x]$表示当$x$集合中所有的点都处于同一个团内的最小代价。 则我们有$f[x \operatornamesta_i]=\ 阅读全文
posted @ 2021-03-30 16:16 Troverld 阅读(60) 评论(0) 推荐(0)
摘要:XLVI.CF1178F2 Long Colorful Strip 首先,每一次染色,最多把一整段连续的同色格子,分成了三段。 并且,明显我们可以把连续的同色格子,直接看作一个。 这就意味着,在这么压缩后,有$m<2n$。 这就意味着$O(m^3)$的复杂度是可以接受的。 还是考虑和前一道题一样的D 阅读全文
posted @ 2021-03-30 16:15 Troverld 阅读(140) 评论(0) 推荐(0)
摘要:XLV.CF1178F1 Short Colorful Strip 考虑设$f[i,j]\(表示:假设区间\)[i,j]$里面一开始所有格子的颜色都是相同的,那么,染成目标状态共有多少种染法。 我们找到$[i,j]$中最小的那个颜色,设为$mp$。则显然,我们下一步要染上$mp$这种颜色。 设最终在 阅读全文
posted @ 2021-03-30 16:12 Troverld 阅读(89) 评论(0) 推荐(0)
摘要:XLVI.[NOI2002]贪吃的九头龙 思路1. 设$f[i][j][k]$表示:在以$i$为根的子树上有$j$个点是归大头吃的,并且第$i$个点是归第$k$个头吃的。 但这样做不仅复杂度高(似乎是$O(n^5)$?),还有个问题:无法保证每个头都至少吃了一个果子。 思路2. 设$f[i][j][ 阅读全文
posted @ 2021-03-30 16:09 Troverld 阅读(79) 评论(0) 推荐(0)
摘要:XLV.CF1088E Ehab and a component choosing problem 思路1.$n^2$DP。 考虑设$f[i][j][0/1]$表示: 节点$i$,子树分了$j$个集合,节点$i$是/否在某个集合内的最大值。 但是这样是没有前途的——你再怎么优化也优化不了,还是只能从 阅读全文
posted @ 2021-03-30 16:07 Troverld 阅读(68) 评论(0) 推荐(0)
摘要:XLIV.CF599E Sandy and Nuts 神题。 本题给我一个忠告:无论什么题,都要先看数据范围(废话)。 没看到$n\leq 13$之前以为是道毒瘤题,看到之后……还是毒瘤题。 因为数据范围小,可以状压。 先不考虑LCA和边的限制。设$f[x][U]$表示:在以$x$为根的子树中,选择 阅读全文
posted @ 2021-03-30 16:05 Troverld 阅读(171) 评论(0) 推荐(0)
摘要:XLIII.CF888F Connecting Vertices 这个奇怪的限制(两条边不能有交点)让我们想到什么? 对于任何一种方案,不存在$x_0<x_1<y_0<y_1$,其中连边$(x_0,y_0),(x_1,y_1)$。 也就是说,对于任何一段区间$[i,j]$,如果里面所有点全都连通: 阅读全文
posted @ 2021-03-30 15:57 Troverld 阅读(204) 评论(0) 推荐(0)
摘要:XLI.CF1067A Array Without Local Maximums 这题DEBUG的我心态爆炸……后来发现是一个$i$打成$j$了……无语。 很容易想到,设$f[i][j][0/1]$表示: 到第$i$位时,位置$i$填入了$j$,且$j\geq\text{位置i-1上的数}$的状态是 阅读全文
posted @ 2021-03-30 15:55 Troverld 阅读(54) 评论(0) 推荐(0)
摘要:XL.[IOI2005]Riv 河流 新转移方式get~~~ 我必须吐槽一下现在赞最多的那篇题解,虽然思路巧妙,但是明显没有“物尽其用”,对于各DP数组的真实含义也没有把握清楚。 一个naive的想法就是:设$f[i][j]$表示:在$i$的子树中,修了$j$个场子,的最小费用。 但是这样不是很好转 阅读全文
posted @ 2021-03-30 15:53 Troverld 阅读(135) 评论(6) 推荐(1)
摘要:XXXVIII.[CQOI2013]二进制A+B 最后判无解试了很多次才判成功……主要是因为“$a,b,c\leq2^{30}\(中有个\)\leq$而不是$<$就很烦人。 思路很简单:设$f[i][j][k][l][0/1]$表示: 按位DP到第$i$位, $a,b,c$中分别用了$j,k,l$个 阅读全文
posted @ 2021-03-30 15:52 Troverld 阅读(93) 评论(0) 推荐(0)
摘要:XXXVII.[JXOI2012]奇怪的道路 神题。 (为以示区别,题面中的$k$我们称作$p$)。 思路1. 观察到$k$很小,考虑状压。 设$f[i][j][k]$表示: 前$i$个位置的边已经全部连完了,位置$[i-p+1,i]$的状态压起来是$j$,并且连了$k$条边的方案数。 代码: #i 阅读全文
posted @ 2021-03-30 15:51 Troverld 阅读(65) 评论(0) 推荐(0)
摘要:XXXVI.[BJOI2017]喷式水战改 这题类似于毒瘤数据结构题,想起来非常简单,但是写起来…… 平衡树是必须写的——这种毒瘤的维护肯定要写平衡树。 然后说一下怎么DP吧。在每个节点上维护$f[i][j]$,表示在以该节点为根的子树上,阶段$i$到阶段$j$的最大收益。 直接在pushup时维护 阅读全文
posted @ 2021-03-30 15:49 Troverld 阅读(69) 评论(0) 推荐(0)
摘要:XXXV.[GDOI2014]拯救莫莉斯 因为$nm\leq 50,m\leq n$, 所以$m$最大只会到$7$,可以状压。 考虑设$f[i][j][k]$表示: 在前$i-1$行已经填好的情况下,第$i-1$行状态为$j$,第$i$行状态为$k$的最小代价和最小数量(是个std::pair)。 阅读全文
posted @ 2021-03-30 15:47 Troverld 阅读(70) 评论(0) 推荐(0)
摘要:XXXIV.[SCOI2008]奖励关 $n\leq 15$就是一眼状压。但这题难点不是状压,而是期望。 应该很容易就能想到,设$f[i][j]$表示前$i$次操作后,状态为$j$的期望收益。但这有个问题——我们不知道如果刷到一个负数收益应不应该选,因为我们不知道这个负数收益在后面会带给我们怎样的期 阅读全文
posted @ 2021-03-30 15:45 Troverld 阅读(76) 评论(0) 推荐(0)
摘要:XXXIII.[HAOI2018]奇怪的背包 神题。 对于某个大小为$v$的物品,它所能表示出的位置的集合等于$\gcd(v,P)$所能表示的集合。 对于某些大小为$v_1,\dots,v_k$的物品,位置集合为$\gcd{v_1,\dots,v_k,P}$。 因此考虑DP。 我们找出所有$P$的约 阅读全文
posted @ 2021-03-30 15:44 Troverld 阅读(78) 评论(0) 推荐(0)
摘要:XXXII.[HNOI2009]双递增序列 某科学的消减维数 思路1.暴力五维DP: 设$f[h][i][j][k][l]$表示:前$h$位中,$U$有$i$位,$V$有$j$位,$U$以$k$结尾,$V$以$l$结尾是否合法。 显然过不去。 思路2.暴力四维DP: 发现必有$i+j=h$,因此我们 阅读全文
posted @ 2021-03-30 15:39 Troverld 阅读(89) 评论(0) 推荐(0)
摘要:XXXI.[CQOI2018]解锁屏幕 $n\leq 20$一眼状压。 设$f[i][j]$表示:访问状态为$i$,当前在$j$点的方案数。 我们枚举一个$k$,表示下一个要去的地方;要判断$j$能不能转移到$k$,还要枚举$l$,判断$j,k,l$是否共线。判断共线是基础向量,一次点积+一次叉积带 阅读全文
posted @ 2021-03-30 15:38 Troverld 阅读(70) 评论(0) 推荐(0)
摘要:XXX.[SDOI2007]游戏 论STL的百种用法 可以观察到可以接龙的对构成一张DAG。因此我们要找到DAG中最长路。这个随便DP就可以了。 关键是找到可以互相转移的位置。 $n^2$枚举非常危险,因为还有一个$26$判断的常数,没试,估计过不了。 我们必须寻找复杂度更低的算法。 发现一个串只与 阅读全文
posted @ 2021-03-30 15:34 Troverld 阅读(68) 评论(0) 推荐(0)
摘要:XXIX.[SDOI2008]Sue的小球 DP做多了,手感自然就出来了。 话说这题打着“小球”的名字题目中却是“彩蛋”是怎么回事 首先,这个下落速度$v$,尽管题面中说它可能为负数,但我们想一想,这可能吗?如果是负数答案就是正无穷(可以等着这个球一直向上飞),因此排除球速为负的可能。 如果是这样的 阅读全文
posted @ 2021-03-30 15:32 Troverld 阅读(61) 评论(0) 推荐(0)
摘要:XXVIII.[HAOI2006]数字序列 第一问: 正难则反。我们考虑从这个序列中找出最多可以保留的数。 如果两个下标$i,j(i<j)$都是要保留的,那么保留的充要条件就是 \(a_j-a_i\geq j-i\) 因为$(i,j)$开区间中的其它数要保证仍然有可以修改到的位置。例如 10 4 3 阅读全文
posted @ 2021-03-30 15:31 Troverld 阅读(72) 评论(0) 推荐(0)
摘要:XXVII.[SHOI2012]随机树 \(q=1\): 考虑令$f_i$表示:一棵有$i$个叶节点的树,叶节点平均深度的期望值。 则$f_i=f_+\dfrac{2}$。 证明: 我们随便从$i-1$个叶子中选一个出来,展开它, 则这次展开期望能为叶子的深度和增加$2*(f_+1)-f_$。 但是 阅读全文
posted @ 2021-03-30 15:27 Troverld 阅读(116) 评论(0) 推荐(0)
摘要:XXVI.[FJOI2007]轮状病毒 论此题的一百种不同解法 首先,这题是有通项公式的—— \(f[i]=3f[i-1]-f[i-2]+2\), 或$f[i]=i^2-4*[i|2]$。 当然这并不是我们DP笔记的讨论内容。 可以观察到,答案相当于: 将$1$到$n$共$n$个物品分成一些相邻的组 阅读全文
posted @ 2021-03-30 15:25 Troverld 阅读(80) 评论(0) 推荐(0)
摘要:XXV.[CQOI2017]老C的键盘 和前一题 完 全 一 致。 那就不讲了,双倍经验水过。 代码: #include<bits/stdc++.h> using namespace std; const int mod=1e9+7; int n,f[1010][1010],head[1010],c 阅读全文
posted @ 2021-03-30 15:23 Troverld 阅读(64) 评论(0) 推荐(0)
摘要:XXIV.[HEOI2013]SAO 这题思路和我们之前的XXII.[ZJOI2010]排列计数类似,也是一棵树的拓扑序数。但是,那题边只有一种情况(相当于这题的第三组$20%$的特殊限制),这题情况就比较复杂。 我们先忽略边方向的限制,把整张图看作一棵无向树。不妨令$0$号节点为根。 发现只维护一 阅读全文
posted @ 2021-03-30 15:22 Troverld 阅读(74) 评论(0) 推荐(0)
摘要:XXIII.[HNOI2010]公交线路 状压+矩乘的好题。 因为每$p$个位置中,每辆车就至少有$1$个位置, 所以我们可以状压一下。 设$f[i][j]$表示: 区间$[i,i+p-1]$内的车站现在的规划情况是$j$的方案数。 显然,必有$j$的第$p$位是$1$,且$j$共有$k$位是$1$ 阅读全文
posted @ 2021-03-30 15:20 Troverld 阅读(64) 评论(0) 推荐(0)
摘要:XXII.[ZJOI2010]排列计数 按照这个关系可以建出一棵树出来;然后一组合法的排列就是这棵树的一组拓扑序。 设$f_x$表示以$x$为根的子树的拓扑序种数,$sz_x$表示以$x$为根的子树的大小, 则有$f_x=\prod\limits_{y\in Son_x}f_y*C_{(sz_x-1 阅读全文
posted @ 2021-03-30 15:18 Troverld 阅读(66) 评论(0) 推荐(0)
摘要:XXI.[HAOI2011]Problem c 这题还是挺简单的~~~ 关于每个位置$i$,在一种合法的方案 \(a\) 中,必有 \((\sum\limits_{j=1}^n[a_j\geq i])\leq n-i+1\)。 因为,每一个$a_j\geq i$都会占据$i$以后的某个位置,而$i$ 阅读全文
posted @ 2021-03-30 15:17 Troverld 阅读(68) 评论(0) 推荐(0)
摘要:XX.[SCOI2010]股票交易 这题状态很好想:设$f[i][j]$表示:第$i$天,持有$j$支股票,的最大收益。 然后我就脑残了,想了个$O(n2m2)$的弱智初始DP,然后就WA掉惹。 实际上转移也挺简单的。设第$i$天买股票花$a_i$元,卖股票花$b_i$元,可以买$A_i$次,卖$B 阅读全文
posted @ 2021-03-30 15:16 Troverld 阅读(81) 评论(0) 推荐(0)
摘要:IXX.[HNOI2005]星际贸易 第一问直接背包一下就行,是模板。 然后,因为题面中的一句话: ……并使得只有一种获得最大贸易值的方法。 因此我们可以直接根据各状态是从哪个前驱状态转移而来直接得出那些必须要访问的星球。 注意,你所规定的这条路径必须满足贸易值最大(不管合不合法(走不走的完),但贸 阅读全文
posted @ 2021-03-30 15:14 Troverld 阅读(116) 评论(0) 推荐(0)
摘要:XVIII.[HAOI2010]软件安装 不知道大家有没有做过这道题[CTSC1997]选课啊,反正我一看到这道题,就想起了它——都是树上背包。所以我便高高兴兴的敲了一发背包交上去。 然后呢?光荣的WA掉了。 为什么呢? 因为这道题和选课不一样;选课是你没有修完前一节课就不能修这节;但是本题是你装软 阅读全文
posted @ 2021-03-30 15:13 Troverld 阅读(53) 评论(0) 推荐(0)
摘要:XVII.CF311B Cats Transport 推式子时间到~~~ 我们首先对题目中的$d_i$做前缀和,求出每座山距离原点距离; 然后对于第$i$只猫,如果一个饲养员在$t_i-d_$时刻以后出发就可以接到它; 注意,饲养员可以在负时刻就出发!!!我之前想多了以为只能在非负时刻出发而纳闷了好 阅读全文
posted @ 2021-03-30 15:11 Troverld 阅读(66) 评论(0) 推荐(0)
摘要:XVI.[HDU3507]Print Article 没什么好说的,这题比任务安排还水,随便推推完事。 代码: #include<bits/stdc++.h> using namespace std; #define int long long int n,m,s[500100],f[500100] 阅读全文
posted @ 2021-03-30 15:10 Troverld 阅读(66) 评论(0) 推荐(0)
摘要:XV.[JSOI2009]火星藏宝图 一个非常显然的结论:在最优方案中,路径上的任意两个点所构成的矩形内部一定不存在其它点。不然的化,在这个其它的点多停留一下一定不会更差。 因为$a2+b2<(a+b)^2$。 但是,就算想到这个,我也得不出什么好的转移方式 考虑将所有岛屿按照行优先,如果行相同就按 阅读全文
posted @ 2021-03-30 15:09 Troverld 阅读(67) 评论(0) 推荐(0)
摘要:XIV.[SDOI2013]保护出题人 这题好像不算DP……但是涉及到斜率和凸包的题都是好题 因为这题要求是确保没有任何一个姜丝能活着走到门口, 所以设血量的前缀和为$s$,每两只姜丝间距离为$m$, 则对于 \(\forall i\) , 都应有$ans_i=\max\limits_^{\dfra 阅读全文
posted @ 2021-03-30 15:08 Troverld 阅读(65) 评论(0) 推荐(0)
摘要:XIII.[SDOI2016]征途 这题已经在我的任务列表里吃了大半年的灰了……(去年7月加进来的,到现在已经8个月了) 开始推式子。 我们设第$i$天的路程是$l_i$, 则我们的目的是最小化 \(s^2=\sum\limits_{i=1}^m\dfrac{(\overline{l}-l_i)^2 阅读全文
posted @ 2021-03-30 15:07 Troverld 阅读(83) 评论(0) 推荐(0)
摘要:XII.[SDOI2012]任务安排 同上一题一样,不过,这题的$t_i$可能有负数,这就意味着前缀和不再是单调增的! 我们不能再像前一题一样用单调队列维护了——但是因为队尾的单调性仍然存在,我们仍然可以维护上凸包。这就启发我们使用单调栈来维护斜率,并且在单调栈中二分。 我们不妨想一想,如果这个$c 阅读全文
posted @ 2021-03-30 15:06 Troverld 阅读(63) 评论(0) 推荐(0)
摘要:XII.任务安排 斜率优化真$\color\colorbox$有意思!! 设$t[i]$表示原题中的$t_i$的前缀和,$c[i]$表示原题中$f_i$的前缀和,$m$表示启动时间$s$。 思路1:$n^3$DP: 设$f[i][j]$表示:前$i$个位置,分成$j$组,的最快时间。 则有$f[i] 阅读全文
posted @ 2021-03-30 15:04 Troverld 阅读(78) 评论(0) 推荐(0)
摘要:XI.[SHOI2007]书柜的尺寸 排序是各类DP题中只要出现了物品这个意象后的常客。 我们首先将书按照高度递减排序。这样,一个书柜的高度,就是第一本被放进来的书的高度。 设$f[i][j][k]$表示:DP到第$i$本书,第一层书架的长度为$j$,第二层书架的长度为$k$时,整个书柜的最小高度。 阅读全文
posted @ 2021-03-30 15:03 Troverld 阅读(106) 评论(0) 推荐(0)
摘要:X.[SCOI2008]着色方案 双倍经验,双倍快乐 可以看出这题直接是上一题的无编号版,直接套上一题的板子,乘上逆元的倒数直接水过,还轻轻松松完虐正解(五维暴力DP) 代码: #include<bits/stdc++.h> using namespace std; const int mod=1e 阅读全文
posted @ 2021-03-30 15:02 Troverld 阅读(109) 评论(0) 推荐(0)
摘要:IX.[AHOI2018初中组]球球的排列 论DP的百种用法之一 因为DP必须有一种全面的状态,但是这道题……似乎排列等等问题都不是DP擅长处理的地方。 首先分析性质。我们发现,这种不能放在一起的关系具有传递性。因为如果$xy=a2,xz=b2$,那么$yz=\dfrac{(xy)(yz)}{x2} 阅读全文
posted @ 2021-03-30 14:59 Troverld 阅读(206) 评论(0) 推荐(1)
摘要:VIII.CF149D Coloring Brackets 考虑设$f[i][j][k=0/1/2][l=0/1/2]\(表示:将区间\)[i,j]$里的东西染色,左端染上颜色$k$,右端染上颜色$l$($0$为红,$1$为蓝,$2$不染)的方案数。 因为这个$n$是$700$,$n3$似乎过不了, 阅读全文
posted @ 2021-03-30 14:56 Troverld 阅读(74) 评论(0) 推荐(0)
摘要:VII.[SDOI2009]Bill的挑战 第一眼看上去不会做。第二眼发现$n\leq 15$直觉状压。第三眼算算复杂度发现OK,然后就没问题了。 我们设$f[i][j]$表示: 当前DP到了第$i$位, 所有串的匹配成功的状态是$j$, 的方案数。 通过预处理一个状压数组$mat[i][j]$表示 阅读全文
posted @ 2021-03-30 14:55 Troverld 阅读(55) 评论(0) 推荐(0)
摘要:VI.[HAOI2008]玩具取名 状压一下。 我们令$f[i][j]\(为:区间\)[i,j]$的串,能转移到字母的状态(是个 bitmask ) 至于转移吗……劈开拼一起即可。 代码: #include<bits/stdc++.h> using namespace std; int m[4],n 阅读全文
posted @ 2021-03-30 14:53 Troverld 阅读(88) 评论(0) 推荐(0)
摘要:IV.[SCOI2003]字符串折叠 一眼区间DP。 设$f[i][j]\(表示:将区间\)[i,j]$内的所有东西压一起的最短长度。 显然,有两种方法: 1.在中间一刀劈开,然后拼一起。 2.找到它的循环节,然后把整个串压一起。 至于找循环节吗……枚举循环节长度,然后无脑哈希一下。 注意,你可能会 阅读全文
posted @ 2021-03-30 14:52 Troverld 阅读(73) 评论(0) 推荐(0)
摘要:V.[SCOI2007]压缩 这种DP状态需要考虑到各种状态的题最讨厌了…… 思路1.设$f[i][j]\(表示将区间\)[i,j]$里面所有东西压一起的最小代价 有两种转移: 砍成两段拼一起 样例里面这种方法,MaRR=aaaa 这种倍增法 然后我就写出了这样的代码: #include<bits/ 阅读全文
posted @ 2021-03-30 14:50 Troverld 阅读(83) 评论(0) 推荐(0)
摘要:III.[SCOI2009]粉刷匠 所有的DP,只要式子一推出来(不管复杂度),那就很简单了,因为优化是成千上万种的…… 思路1.我们考虑设$f[i][j][k]$表示:当前DP到第$i$块木板的第$j$个位置,共涂了$k$次,所能获得的最大收益。因为还要枚举当前这次涂是从哪到哪的,因此复杂度为$O 阅读全文
posted @ 2021-03-30 14:47 Troverld 阅读(86) 评论(0) 推荐(0)
摘要:II.[HAOI2010]计数 我不得不吐槽出题人的语文实在太……那个了。 翻译一下:给你一个数,求它是全排列中第几个。 为什么呢?我们看一下给定的那个${1,2}$的例子。显然,在任何合法的数中,所有的非零数的出现次数,在每个数中都是相同的。如果我们允许前导零,那么所有的$0$的出现次数也都相同了 阅读全文
posted @ 2021-03-30 14:46 Troverld 阅读(48) 评论(0) 推荐(0)
摘要:I.[JSOI2010]快递服务 我们约定共有$n$个地点,依次登记了$m$家公司。 思路1. 设$f[l][i][j][k]$表示:当前某一个司机在第$i$家公司(注意是公司!$1000$家那个!),第二个司机在第$j$家,第三个司机在第$k$家,当前我们遍历到了第$l$家公司。依次转移即可。 复 阅读全文
posted @ 2021-03-30 14:43 Troverld 阅读(65) 评论(0) 推荐(0)
摘要:XII.[CFGYM100221C]Forbidden Subwords ”双向无限“之类东西太抽象了,我们不妨从简单点的地方考虑。比如说,有限串。 一个有限串中没有出现任何禁忌串的充要条件是什么?沿着AC自动机上边走时没有碰到任何结束点。 现在,我们考虑一个右侧无限的串(即有一个明确开头,但另一端 阅读全文
posted @ 2021-03-30 14:42 Troverld 阅读(83) 评论(0) 推荐(0)
摘要:XI.CF1437G Death DBMS 考虑建出AC自动机,然后在上面跑询问串。于是问题转为单点修改,路径求 \(\max\),无脑上树剖在$fail$树上维护即可。 注意到会有相同的串,那就在每个节点上一个multiset维护最大值即可。 复杂度 \(O(n\log^2n)\)。 代码: #i 阅读全文
posted @ 2021-03-30 14:40 Troverld 阅读(69) 评论(0) 推荐(0)
摘要:X.[ICPC2019 WF]First of Her Name 这题的一种解法是把所有东西(名字串和翻转的询问串)建出一棵树来,然后跑树上后缀排序,用二分+哈希求出$height$数组,然后使用单调栈找出每个位置最多能够向左向右延伸多远。但是按照某人的说法出题人好像出了卡此算法的数据,所以最后WA 阅读全文
posted @ 2021-03-30 14:38 Troverld 阅读(145) 评论(0) 推荐(0)
摘要:IX.[BJWC2011]禁忌 老套路,建出AC自动机,并求出每个节点的$ok$。 之后呢? 考虑dp。 令$f_{i,j}$表示在一个长度为$i$的串,当前在点$j$的可能性。 则有: 对于任意$k\in [0,alphabet)$, 如果$t[t[j].ch[k]].ok$为$true$,那么$ 阅读全文
posted @ 2021-03-30 14:34 Troverld 阅读(86) 评论(0) 推荐(0)