摘要: 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 阅读(68) 评论(0) 推荐(0) 编辑
摘要: IV.[SCOI2003]字符串折叠 一眼区间DP。 设$f[i][j]\(表示:将区间\)[i,j]$内的所有东西压一起的最短长度。 显然,有两种方法: 1.在中间一刀劈开,然后拼一起。 2.找到它的循环节,然后把整个串压一起。 至于找循环节吗……枚举循环节长度,然后无脑哈希一下。 注意,你可能会 阅读全文
posted @ 2021-03-30 14:52 Troverld 阅读(44) 评论(0) 推荐(0) 编辑
摘要: V.[SCOI2007]压缩 这种DP状态需要考虑到各种状态的题最讨厌了…… 思路1.设$f[i][j]\(表示将区间\)[i,j]$里面所有东西压一起的最小代价 有两种转移: 砍成两段拼一起 样例里面这种方法,MaRR=aaaa 这种倍增法 然后我就写出了这样的代码: #include<bits/ 阅读全文
posted @ 2021-03-30 14:50 Troverld 阅读(51) 评论(0) 推荐(0) 编辑
摘要: III.[SCOI2009]粉刷匠 所有的DP,只要式子一推出来(不管复杂度),那就很简单了,因为优化是成千上万种的…… 思路1.我们考虑设$f[i][j][k]$表示:当前DP到第$i$块木板的第$j$个位置,共涂了$k$次,所能获得的最大收益。因为还要枚举当前这次涂是从哪到哪的,因此复杂度为$O 阅读全文
posted @ 2021-03-30 14:47 Troverld 阅读(59) 评论(0) 推荐(0) 编辑
摘要: II.[HAOI2010]计数 我不得不吐槽出题人的语文实在太……那个了。 翻译一下:给你一个数,求它是全排列中第几个。 为什么呢?我们看一下给定的那个${1,2}$的例子。显然,在任何合法的数中,所有的非零数的出现次数,在每个数中都是相同的。如果我们允许前导零,那么所有的$0$的出现次数也都相同了 阅读全文
posted @ 2021-03-30 14:46 Troverld 阅读(37) 评论(0) 推荐(0) 编辑
摘要: I.[JSOI2010]快递服务 我们约定共有$n$个地点,依次登记了$m$家公司。 思路1. 设$f[l][i][j][k]$表示:当前某一个司机在第$i$家公司(注意是公司!$1000$家那个!),第二个司机在第$j$家,第三个司机在第$k$家,当前我们遍历到了第$l$家公司。依次转移即可。 复 阅读全文
posted @ 2021-03-30 14:43 Troverld 阅读(39) 评论(0) 推荐(0) 编辑
摘要: XII.[CFGYM100221C]Forbidden Subwords ”双向无限“之类东西太抽象了,我们不妨从简单点的地方考虑。比如说,有限串。 一个有限串中没有出现任何禁忌串的充要条件是什么?沿着AC自动机上边走时没有碰到任何结束点。 现在,我们考虑一个右侧无限的串(即有一个明确开头,但另一端 阅读全文
posted @ 2021-03-30 14:42 Troverld 阅读(57) 评论(0) 推荐(0) 编辑
摘要: XI.CF1437G Death DBMS 考虑建出AC自动机,然后在上面跑询问串。于是问题转为单点修改,路径求 \(\max\),无脑上树剖在$fail$树上维护即可。 注意到会有相同的串,那就在每个节点上一个multiset维护最大值即可。 复杂度 \(O(n\log^2n)\)。 代码: #i 阅读全文
posted @ 2021-03-30 14:40 Troverld 阅读(48) 评论(0) 推荐(0) 编辑
摘要: X.[ICPC2019 WF]First of Her Name 这题的一种解法是把所有东西(名字串和翻转的询问串)建出一棵树来,然后跑树上后缀排序,用二分+哈希求出$height$数组,然后使用单调栈找出每个位置最多能够向左向右延伸多远。但是按照某人的说法出题人好像出了卡此算法的数据,所以最后WA 阅读全文
posted @ 2021-03-30 14:38 Troverld 阅读(125) 评论(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 阅读(56) 评论(0) 推荐(0) 编辑