HDU2457 DNA repair AC自动机
来源:互联网 发布:淘宝虚拟物品发货 编辑:程序博客网 时间:2024/06/05 09:03
这题真的是我的痛!一晚上调了3小时,全都WA了。。。在网上还找了一大堆数据,算的都一样原来,格式错了。。。
#include<stdio.h>#include<string.h>#include<queue>using namespace std;#define maxn 1010int n,ch[maxn][4],val[maxn],fail[maxn],d[maxn][maxn],tot,root;char a[maxn];int newnode(){memset(ch[tot],0,sizeof(ch[tot]));val[tot]=0;return tot++;}int id(char t){if(t=='A')return 0;else if(t=='C')return 1;else if(t=='G')return 2;else return 3;}void insert(){int len=strlen(a),cur=root,i;for(i=0;i<len;i++){if(!ch[cur][id(a[i])])ch[cur][id(a[i])]=newnode();cur=ch[cur][id(a[i])];}val[cur]=1;}queue<int>q;void getfail(){fail[root]=root;for(int i=0;i<4;i++)if(ch[root][i]){fail[ch[root][i]]=root;q.push(ch[root][i]);}while(!q.empty()){int cur=q.front();q.pop();for(int i=0;i<4;i++)if(!ch[cur][i])ch[cur][i]=ch[fail[cur]][i];else{fail[ch[cur][i]]=ch[fail[cur]][i];val[ch[cur][i]]|=val[ch[fail[cur]][i]];q.push(ch[cur][i]);}}}int min(int a,int b){return a<b?a:b;}int main(){int ex=1;while(~scanf("%d",&n)&&n){int i,k,j;tot=0;root=newnode();for(i=0;i<n;i++){scanf("%s",a);insert();}getfail();scanf("%s",a);memset(d,0x3f,sizeof(d));d[0][0]=0;int len=strlen(a);for(i=0;i<len;i++)for(j=0;j<tot;j++)if(d[i][j]!=0x3f3f3f3f)for(k=0;k<4;k++){if(val[ch[j][k]])continue;d[i+1][ch[j][k]]=min(d[i+1][ch[j][k]],d[i][j]+(k==id(a[i])?0:1));}int ans=0x3f3f3f3f;for(j=0;j<tot;j++)if(ans>d[len][j])ans=d[len][j];printf("Case %d: ",ex++);if(ans==0x3f3f3f3f)printf("-1\n");elseprintf("%d\n",ans);}return 0;}
0 0
- HDU2457 DNA repair AC自动机
- [HDU2457]DNA repair-AC自动机
- hdu2457 & poj3691 DNA repair AC自动机+DP
- hdu2457 DNA repair AC自动机+DP
- hdu2457---DNA repair(AC自动机+dp)
- HDU2457 DNA repair AC自动机+DP
- hdu2457 DNA repair(AC自动机+dp)
- hdu2457 DNA repair(AC自动机+dp)
- hdu2457 poj3691 DNA Repair AC自动机 + dp
- HDU2457 DNA repair AC自动机上的简单DP
- [AC自动机]DNA Repair
- hdu2457 DNA repair ac机+dp
- hdu2457 DNA repair
- DNA repair hdu2457
- HDU2457--DNA repair
- HDU2457 DNA repair
- HDU2457-DNA repair
- [AC自动机+dp]PKU 3691--DNA repair
- 进程与线程的一个简单解释
- 使用ListView的Fragment
- Android Handler消息机制深入浅出
- 【UVA】531-Compromise(最长公共子串)
- linux的互斥mutex
- HDU2457 DNA repair AC自动机
- UVA 1220Party at Hali-Bula
- Eclipse的源码修改
- 有源蜂鸣器与无源蜂鸣器的区别(超全)
- 关于IL中间语言的浅谈
- C#学习
- Android 使用Socket完成进程间通信
- mysqldump如何保证数据一致性
- Android Intent Flag的介绍