2012年3月12日

zoj 3190 / hdu 3247 Resource Archiver AC自动机+BFS+状态dp

摘要: 【题意】给出n个资源串,m个病毒串,要你用这n个资源串组成一个最小的串,使得不包含任何m个病毒串中的一串。 (2 <= n <= 10, 1 <= m <= 1000),所有串都是非空的01序列,且每个资源串长度不大于1000,病毒串总长小于50000。 所有资源串都不相同,且不包含包含任何病毒串。【思路】先对资源串和病毒串的集合建立AC自动机,然后在trie树上做BFS求出在安全图上每个资源串 到其他资源的最短路径,最后做一遍状态压缩dp即可。 状态:dp[i][j]表示以i结尾的状态为j的最短串 状态转移:dp[k][j|(1<<k)] = ... 阅读全文

posted @ 2012-03-12 19:22 孤星_bin 阅读(385) 评论(0) 推荐(0) 编辑

2012年3月11日

hdu 2243 考研路茫茫——单词情结 AC自动机+转移矩阵

摘要: 【题意】每组数据占两行。 第一行有两个正整数N和L。(0<N<6,0<L<2^31) 第二行有N个词根,每个词根仅由小写字母组成,长度不超过5。两个词根中间用一个空格分隔开。 求长度不超过L,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?这里不考虑单词是否有实际意义。 题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2243【思路】 此题是poj 2778 的加强版,嫉妒恶心啊。。 看到”至少“等字眼,如果正面做比较难的话,可以考虑从对立面思考,所谓正难则反嘛。 因此... 阅读全文

posted @ 2012-03-11 17:55 孤星_bin 阅读(277) 评论(0) 推荐(0) 编辑

2012年3月10日

zoj 3228 Searching the String 字典树的应用

摘要: 【题意】给出一串主串,然后下面有n串模式串,模式串前面有一个值, 0:在主串中有多少串该模式串,假如aaa 找aa,那么就有2串 1:在主串中有多少串该模式串,并且不能有重叠部分,假如aaa找aa,那么只有1串首先对长串分割,建立trie树,这样从字符串上任意一个位置开始的长度不超过6的子串都记录下来了。对于可以重叠的子串的数量,直接对一个原有的节点上的记录的数+1即可;对于不能重叠的,就要用到刚才那个“记录每个单词最后出现的pos”了,看这个状态节点最后出现的位置是否与当前看到的有重叠,没有才能对那个数字+1并更新节点位置。View Code 1 #include<iostream&g 阅读全文

posted @ 2012-03-10 20:24 孤星_bin 阅读(348) 评论(0) 推荐(0) 编辑

导航