题意:给N个串,一个大串,要求在最小的改变代价下,得到一个不含上述n个串的大串。

思路:dp,f[i][j]代表大串中第i位,AC自动机上第j位的最小代价。

 #include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<queue>
std::queue<int>Q;
int ch[][],end[],f[][],sz,root,fail[],n,Tcase;
char s[];
int newnode(){
for (int i=;i<=;i++)
ch[sz][i]=-;
end[sz]=;
sz++;
return sz-;
}
void clear(){
sz=;root=newnode();
}
int num(char c){
if (c=='A') return ;
else
if (c=='T') return ;
else
if (c=='G') return ;
else
if (c=='C') return ;
return ;
}
void insert(){
scanf("%s",s);
int len=strlen(s);
int now=root;
for (int i=;i<len;i++){
if (ch[now][num(s[i])]==-) ch[now][num(s[i])]=newnode();
now=ch[now][num(s[i])];
}
end[now]=;
}
void build(){
int now=root;
std::queue<int>Q;
fail[root]=root;
for (int i=;i<=;i++)
if (ch[root][i]==-) ch[root][i]=root;
else fail[ch[root][i]]=root,Q.push(ch[root][i]);
while (!Q.empty()){
int now=Q.front();Q.pop();
if (end[fail[now]]==) end[now]|=;
for (int i=;i<=;i++){
if (ch[now][i]==-) ch[now][i]=ch[fail[now]][i];
else fail[ch[now][i]]=ch[fail[now]][i],Q.push(ch[now][i]);
}
}
}
void dp(){
scanf("%s",s);
int len=strlen(s);
for (int i=;i<=len;i++)
for (int j=;j<=sz;j++)
f[i][j]=;
f[][root]=;
for (int i=;i<len;i++)
for (int j=;j<sz;j++)
if (f[i][j]<){
for (int k=;k<=;k++){
int now=ch[j][k];
if (end[now]) continue;
int tmp;
if (k==num(s[i])) tmp=f[i][j];
else tmp=f[i][j]+;
f[i+][now]=std::min(f[i+][now],tmp);
}
}
int ans=;
for (int i=;i<sz;i++)
ans=std::min(ans,f[len][i]);
if (ans==) ans=-;
printf("%d\n",ans);
}
int main(){
while (scanf("%d",&n)!=EOF){
if (n==) return ;
Tcase++;
printf("Case %d: ",Tcase);
clear();
for (int i=;i<=n;i++)
insert();
build();
dp();
}
}

HDU 2457 DNA repair (AC自动机+DP)的更多相关文章

  1. POJ 3691 &amp; HDU 2457 DNA repair (AC自己主动机,DP)

    http://poj.org/problem?id=3691 http://acm.hdu.edu.cn/showproblem.php?pid=2457 DNA repair Time Limit: ...

  2. HDU 2457/POJ 3691 DNA repair AC自动机+DP

    DNA repair Problem Description   Biologists finally invent techniques of repairing DNA that contains ...

  3. HDU2457 DNA repair —— AC自动机 + DP

    题目链接:https://vjudge.net/problem/HDU-2457 DNA repair Time Limit: 5000/2000 MS (Java/Others)    Memory ...

  4. [hdu2457]DNA repair(AC自动机+dp)

    题意:给出一些不合法的模式DNA串,给出一个原串,问最少需要修改多少个字符,使得原串中不包含非法串. 解题关键:多模式串匹配->AC自动机,求最优值->dp,注意在AC自动机上dp的套路. ...

  5. POJ 3691 DNA repair(AC自动机+DP)

    题目链接 能AC还是很开心的...此题没有POJ2778那么难,那个题还需要矩阵乘法,两个题有点相似的. 做题之前,把2778代码重新看了一下,回忆一下当时做题的思路,回忆AC自动机是干嘛的... 状 ...

  6. POJ3691 DNA repair(AC自动机 DP)

    给定N个长度不超过20的模式串,再给定一个长度为M的目标串S,求在目标串S上最少改变多少字符,可以使得它不包含任何的模式串 建立Trie图,求得每个节点是否是不可被包含的串,然后进行DP dp[i][ ...

  7. Hdu 2457 DNA repair (ac自己主动机+dp)

    题目大意: 改动文本串的上的字符,使之不出现上面出现的串.问最少改动多少个. 思路分析: dp[i][j]表示如今 i 个字符改变成了字典树上的 j 节点. 然后顺着自己主动机一直转移方程. 注意合法 ...

  8. HDU 2457 DNA repair(AC自动机+DP)题解

    题意:给你几个模式串,问你主串最少改几个字符能够使主串不包含模式串 思路:从昨天中午开始研究,研究到现在终于看懂了.既然是多模匹配,我们是要用到AC自动机的.我们把主串放到AC自动机上跑,并保证不出现 ...

  9. hdu 4117 GRE Words AC自动机DP

    题目:给出n个串,问最多能够选出多少个串,使得前面串是后面串的子串(按照输入顺序) 分析: 其实这题是这题SPOJ 7758. Growing Strings AC自动机DP的进阶版本,主题思想差不多 ...

随机推荐

  1. Powershell使用管道

    管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示.传统的Cmd管道是基于文本的,但是Powershell是基于对象. PS> ls | Sor ...

  2. windows puppet manifests 文件维护

    初级 puppet windows agent实现简单的msi格式安装包安装及bat文件创建;

  3. debuggap,移动端调试新方式

    最近发现了一个移动端调试的新技能,这里简单描述一下基本情况. 移动端调试常遇到的问题 手机访问只能看到页面的展现,除此之外看不到任何其他信息 无法像调试PC页面那么方便的查看js.dom.networ ...

  4. Java之面向对象相关问题集

    面向对象的特征有哪些方面  1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解所有问题,而仅仅是选择当中的一部分,临时不用部分细节. 抽 ...

  5. 未能载入文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件。

    这个一般出如今三层给B层与D层之间加抽象工厂-接口-映射.时候出的错.出错的地方是抽象工厂. --如图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTA ...

  6. Android自定义控件(二)——有弹性的ScrollView

    本文在http://gundumw100.iteye.com/blog/1075286的基础上稍作修改, 实现了当手指滑动到ScrollView的顶部.底部时, 可以继续的向上.向下拉伸.当释放手指的 ...

  7. Javascript高级程序设计读书笔记(第二章)

    第二章  在HTML中使用Javascript 2.1<script>元素 延迟脚本(defer = "defer")表明脚本在执行时不会影响页面的构造,脚本会被延迟到 ...

  8. arraylist与List<>

    arraylist 不用规定 类型 list<>用规定类型 推荐list 这个编译检查类型  出错率低 代码质量高

  9. Jquery:强大的选择器<二>

    今天跟着资料做了一个示例,为什么我感觉自己做的没书上的好看呢?好吧,我承认自己对css样式只懂一点皮毛,我也不准备深度的去学习它,因为……公司有美工嘛! 这个小示例只是实现了元素的隐藏和显示.元素cl ...

  10. 关于垂直切分Vertical Sharding的粒度

    转载原文地址 http://blog.csdn.net/bluishglc/article/details/6274841 垂直切分的粒度指的是在做垂直切分时允许几级的关联表放在一个shard里.这个 ...