KMP&&Trie&&AC自动机
文章平均质量分 77
Good_night_Sion_
Good Night, Sion.
展开
-
UVALive 3942 Remeber the Word Trie+递推
很好嘛,一直都是做DP,这种题倒是做的很少了 想到了是递推,但是没敢写,嘛,多多练习就好 先把给的所有单词建成一个Trie,把原串记做str 定义dp[i]表示在str中从1~i(含,且str下标从1开始)的子串的合成方法数,因此答案就是dp[length(str)] dp[i]=∑(k∈S)dp[i-k] ,{ k∈S |原创 2017-02-09 11:20:35 · 325 阅读 · 0 评论 -
UVA 11732 strcmp() Anyone? Trie的左儿子右兄弟表示法
思考了一会儿,发现这题目要一层层的考虑。 即,在插入一个字符串str到Trie的时候,同时更新答案 两个字符串,在对比到第i个位置不同时,通过的比较次数是(i 假若到最后都相同的话,比较的次数是(length+1) 抱着这样的想法,我发现普通的Trie并不好维护这个玩意,看了题解才明白。 没想到在这里遇见了左原创 2017-02-09 11:33:42 · 508 阅读 · 0 评论 -
100道动态规划——28 POJ 2778 DNA Sequence AC自动机+DP+矩阵快速幂 很不错嘛
一眼看出是AC自动机上的DP,因为数据量的问题显然不能记忆化搜索或者是递推,然后就不知道怎么做了 天知道还要联系到矩阵快速幂,图论的东西好久都没写过了=_= 定义一个Matrix的数据结构,也就是矩阵,由矩阵的长、宽、以及每个分量上的元素描述而成,支持通常意义上的矩阵乘法(在具体实现的时候用的是稀疏矩阵乘法),此外拥有一个成员函数qpow(int n),返回值为原创 2017-02-22 15:58:46 · 661 阅读 · 0 评论 -
100道动态规划——29 UVALive 5766 GRE Words AC自动机上的动态规划
之前怎么写都是WA,空了一天写还是WA,把cin和cout都换成scanf和printf就过,奇怪的问题 定义状态dp[i]表示选择第i个串的最大价值 状态转移方程就是 dp[i]=max{dp[j]}+value[i],其中要求0 因此问题就归结于高效判断子串的问题,这要求我们把每一个串都保存下来,当然,你记录每个点的father也行原创 2017-02-22 16:13:10 · 892 阅读 · 0 评论 -
100道动态规划——30 UVAlive 3907 Puzzle AC自动机上的动态规划,记忆化搜索
一开始确实没有想到怎么做。。 定义状态dp[i]表示自动机上的节点i还能够附加多长的字符,因此每一个串的结尾字符在自动机上对应的dp为0,这就是初始条件 状态转移方程就是dp[i]=max{dp[j]}+1,其中j表示i点可达的节点,最后的答案就是dp[root] 输出No的情况有两个,一个是在记忆化搜索的过程中,走到了一个已经访问过的节点了原创 2017-02-22 16:31:42 · 671 阅读 · 0 评论