博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2457 DNA repair
阅读量:5127 次
发布时间:2019-06-13

本文共 1871 字,大约阅读时间需要 6 分钟。

题目链接:

题意:给出一些不合法的模式DNA串,给出一个原串,问最少需要修改多少个字符,使得原串中不包含非法串。

思路:沿着AC自动机dp,dp[i][j]表示前i个字符,当前为状态j的时候,需要修改的最少字符数。

代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std; 11 typedef long long LL; 12 const LL MAXN=2e3+10; 13 const LL INF=0x3f3f3f3f; 14 15 struct AC 16 { 17 int ch[MAXN][4]; 18 int val[MAXN]; 19 int chr[MAXN]; 20 int sz; 21 AC() { init(); } 22 void init() { sz=1; memset(ch[0],0,sizeof(ch[0])); memset(val,0,sizeof(val));} 23 int idx(char c) 24 { 25 if(c=='A') return 0; 26 if(c=='G') return 1; 27 if(c=='C') return 2; 28 if(c=='T') return 3; 29 return 4; 30 } 31 void insert(char *s) 32 { 33 int u=0,n=strlen(s); 34 for(int i=0;i
q; 77 f[0]=0; 78 for(int c=0;c<4;c++) 79 { 80 int u=ch[0][c]; 81 if(u) {f[u]=0;q.push(u);last[u]=0;} 82 } 83 while(!q.empty()) 84 { 85 int r=q.front();q.pop(); 86 for(int c=0;c<4;c++) 87 { 88 int u=ch[r][c]; 89 if(!u) 90 { 91 ch[r][c]=ch[f[r]][c]; 92 continue; 93 } 94 q.push(u); 95 int v=f[r]; 96 while(v && !ch[v][c]) v=f[v]; 97 f[u]=ch[v][c]; 98 last[u]=val[f[u]]?f[u]:last[f[u]]; 99 if(!val[u]) val[u]=val[last[u]];100 }101 }102 }103 };104 AC T;105 int f[MAXN][MAXN];106 char s[MAXN];107 int main()108 {109 #ifdef LOCAL110 freopen("in.txt","r",stdin);111 // freopen("out.txt","w",stdout);112 #endif113 int n;114 int tt=0;115 while(scanf("%d",&n)!=EOF && n)116 {117 tt++;118 T.init();119 for(int i=1;i<=n;i++)120 {121 scanf("%s",s);122 T.insert(s);123 }124 T.getFail();125 scanf("%s",s);126 int l=strlen(s);127 memset(f,INF,sizeof(f));128 for(int k=0;k<4;k++) if(!T.val[T.ch[0][k]])129 f[0][T.ch[0][k]]=(k==T.idx(s[0]))?0:1;130 for(int i=0;i
=INF) ans=-1;141 printf("Case %d: %d\n",tt,ans);142 }143 return 0;144 }

 

转载于:https://www.cnblogs.com/zarth/p/7565419.html

你可能感兴趣的文章
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
[SQL Server 系] T-SQL数据库的创建与修改
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>
Wpf 之Canvas介绍
查看>>
linux history
查看>>
jQuery on(),live(),trigger()
查看>>
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>