第一道AC自动机...从上周日就开始写了..搞得我都要抓狂了...今天也是看了在网上搜了些解题报告才搞定...发现和我自己整得差别较大...瞎忙活了3天...
.题意是说给了N个带病毒的DNA串( DNA串只有AGCT几种单元组成)...再给一长串DNA..问这长串DNA最少改动几个(就是改..不是删除或者添加..)能保证没有包含病毒字串..输出这个最小改动的次数..若怎么修改都带病毒子串...输出-1...
所谓dp就是要构造一个无后效性的状态...并能从前往后推出所要的最优解....
我参考了http://blog.csdn.net/human_ck/article/details/6577142的思路...很清晰...代码也简洁...
我也来说明几个问题..
问题一:为什么当一个节点是病毒节点(某个病毒串的末位)..要逆向随着Fail.要往下传...
如果前面有一段是病毒...指向末位的下面那个点和他几个Father连起来的必定也是这段病毒..
问题二:为什么在构造Fail指针时若其某个孩子没有要指向其Father->Fail的相同孩子...
其实这相当于是往上传~~一直往上Fail传直到找到上面某个的孩子中有这个...若这样到根都没有..那么这个点就直接指向根了...指向根代表当前这课Trie中没有符合的..这样的好处就是虽然构造的Trie中没有这个点...也没有给这个点分配空间...但是...我们给了这个点一个标记的类似...使得后面的DP中找不到时能直接向上返回...如果不这么搞也行..就要在DP中多加些东西.. 例如
1
AAA
GGG
这组数据可以说在后面通过遍历Trie做DP时一个点都进不去...如果前面加了关于Trie中没得该点的预处理...那么实际上就利用起来了那个没带字符信息的超级结点.....
Program:
分享到:
相关推荐
北大POJ2002-Squares 解题报告+AC代码
北大POJ1015-Jury Compromise【动态规划DP】 解题报告+AC代码
北大POJ3253-POJ3253-Fence Repair【STL优先队列】 解题报告+AC代码
poj 1000 - 2000 部分题目 官方分类 poj 1000 - 2000 部分题目 官方分类
北大POJ1426-Find The Multiple【BFS+同余模】 解题报告+AC代码
北大POJ3020-Antenna Placement 解题报告+AC代码
这是魔兽世界终极版POJ的-测试数据,找了好久才找到的。 本来想设置为0积分,但是它居然自动收费(o_ _)ノ。 看传送门:https://pan.baidu.com/s/1cCIwW8psGDASu2JdZawG3Q
北大POJ3414-Pots 解题报告+AC代码
POJ3211--Washing Clothes
北大POJ2305-Basic remains POJ2305-Basic remains
北大POJ1321-Chess Problem POJ1321-Chess Problem
北大POJ初级-所有题目AC代码+解题报告
北大POJ1159-Palindrome 解题报告+AC代码
北大POJ1080-Human Gene Functions POJ1080-Human Gene Functions
北大POJ1258-Agri-Net【Prim】 解题报告+AC代码
北大POJ2503-Babelfish 解题报告+AC代码
北大POJ1201-Intervals 解题报告+AC代码
北大POJ1011-Sticks 解题报告+AC代码
北大POJ1039-Pipe 解题报告+AC代码
北大POJ1010-STAMPS 解题报告+AC代码