BZOJ 1212 L语言(DP+字典树)】的更多相关文章

求能被理解的最长前缀. 很显然的dp.令dp[i]=true,表示前缀i能理解.否则不能理解.那么dp[i+len]=dp[i]=true,当s[len]能匹配str[i,i+len]. 由于模式串长度为10.且匹配过程可以用字典树加速. 所以复杂度就是O(10*m*len). # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include &…
Link: BZOJ 1212 传送门 Solution: 看到字符串的多模式匹配,正解一般就是Trie树/AC自动机 此题由于每个模式串长度都很小,于是直接在Trie树上暴力就行了 先把所有模式串建一颗Trie树, 用$DP[i]$表示能否匹配到第$i$个字符,如果能,则从第$i+1$位开始继续从根开始匹配,查看能否拓展答案 上述偏暴力的做法复杂度在$O(4*10^8)$左右, 好像还有一种用AC自动机+状压DP的做法能降到$O(10^6)$,后面再填吧 Code: #include <bit…
1212: [HNOI2004]L语言 题目:传送门 题解: 看完题目之后就觉得可以暴力在字典树上之间询问,一开始还傻了以为用文章来建,肯定用单词啊: 那么我们可以用一个v数组表示当前字符串1~i的区间能够被覆盖,v[0]就初始化一下 然后一开始就把位置挪到当前已经处理到的能覆盖的位置x,然后从x+1开始在字典树上跑,跑到一个单词的结尾就更新当前位置的v(即使单词有包含关系也没所谓,只要路过就会更新,找不到了才结束,那肯定跑到最后一个位置最优啊),然后重复操作(换一个单词) 严重吐槽:说好的是字…
2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章 TT 是由若干小写字母构成.一个单词 WW 也是由若干小写字母构成.一个字典 DD 是若干个单词的集合.我们称一段文章 TT 在某个字典 DD 下是可以被理解的,是指如果文章 TT 可以被分成若干部分,且每一个部分都…
因为单词很短...用trie然后每次dp暴力查找...用哈希+dp应该也是可以的.... --------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #include<bitset>   using namespa…
[题目链接]  http://www.lydsy.com/JudgeOnline/problem.php?id=4260 [题目大意] 给出一个数列,请找出两段连续且不相交的数段,使得其分别异或和的和最大. [题解] 在字典树上进行贪心我们可以得到当前数与已经插入的数的最大异或值, 我们将插入值转为前缀和,即可得到固定区间右端点的区段异或最大值. 同理我们可以计算后缀和的字典树,得到固定区间左端的区段异或最大值, 枚举断点,用前缀最大值与后缀最大值的和更新答案即可. [代码] #include…
Code: #include<bits/stdc++.h> #define maxn 1000003 using namespace std; char str[maxn],strtot[maxn]; int lentot,scc,flag,pp=0; int st[maxn],ed[maxn],C[30][30],vis[maxn],vised[maxn],pre[maxn],low[maxn]; void setIO(string s) { string in=s+".in&qu…
BZOJ LOJ 令\(f[i][j]\)表示以\(i\)为根的子树,权值\(j\)作为根节点的概率. 设\(i\)的两棵子树分别为\(x,y\),记\(p_a\)表示\(f[x][a]\),\(p_a'\)表示\(f[y][a]\),\(P_i\)表示给定的\(i\)取最大值作为权值的概率. 转移就是两棵树之间的权值组合,即以\(x\)子树中的\(a\)作为最小值的概率为\(p_a\times\sum\limits_{v>a}p_v'\times(1-P_i)\),以\(x\)子树中的\(a\…
很有意思的一道题啊. 求两个序列的最大公共子序列.保证每个序列中含有1-n各5个. 如果直接LCS显然是TLE的.该题与普通的LCS不同的是每个序列中含有1-n各5个. 考虑LCS的经典DP方程.dp[i][j]=dp[i-1][j-1]+1.(a[i]==b[j]). dp[i][j]=max(dp[i-1][j],dp[i][j-1]).(a[i]!=b[j]). 如果换个角度看看.令dp[i][j]表示a序列以i结尾,b序列到j的最大公共子序列长度. 则有dp[i][j]=max(dp[k…
传送门 题意: 删除价值和最小的边使得$1$号点与$k$个关键点不连通 一个树形DP...但是询问多次,保证总的关键点数为$O(n)$ 先说一下这个$DP$ $f[i]$表示子树$i$中的关键点与$1$不连通的最小价值 如果$i$是关键点则必须删除$i$到$1$的权值最小的边,否则$\sum f[child\ of\ i]$ 学了一下虚树...找不到别的资料啊只有别人的$Blog$ 试验了好多写法 貌似其中有好多带$Bug$的写法 最终定下了现在的版本应该是没大有问题的吧...明天再做两道虚树,…