博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4057Rescue the Rabbit(ac自动机+dp)
阅读量:4697 次
发布时间:2019-06-09

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

当时是因为没有做出来这道题才开了自动机的专题,现在看看还是比较简单的。

因为每个病毒串只算一次,只有10个病毒串,可以状压一下哪些状态是可以达到的,最后取一个最大值。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 using namespace std; 12 #define N 1005 13 #define LL long long 14 #define INF 0xfffffff 15 const double eps = 1e-8; 16 const double pi = acos(-1.0); 17 const double inf = ~0u>>2; 18 const int child_num = 4; 19 char vir[115]; 20 int v[12]; 21 class AC 22 { 23 private: 24 int ch[N][child_num]; 25 int fail[N]; 26 int Q[N]; 27 int val[N]; 28 int sz; 29 int id[128]; 30 int dp[2][N][1<<10]; 31 char s[N]; 32 public: 33 void init() 34 { 35 fail[0] = 0; 36 id['A'] = 0,id['G'] = 1,id['T'] = 2,id['C'] = 3; 37 } 38 void reset() 39 { 40 memset(ch[0],0,sizeof(ch[0])); 41 memset(val,0,sizeof(val)); 42 sz = 1; 43 } 44 void insert(char *a,int key) 45 { 46 int p = 0; 47 for(; *a ; a++) 48 { 49 int d= id[*a]; 50 if(ch[p][d]==0) 51 { 52 memset(ch[sz],0,sizeof(ch[sz])); 53 s[sz] = *a; 54 ch[p][d] = sz++; 55 } 56 p = ch[p][d]; 57 } 58 val[p] = (1<
<= m ;i++)136 {137 scanf("%s%d",vir,&v[i-1]);138 ac.insert(vir,i-1);139 }140 ac.construct();141 ac.work(n,m);142 }143 return 0;144 }
View Code

 

转载于:https://www.cnblogs.com/shangyu/p/3750790.html

你可能感兴趣的文章
三元表达式
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
客户端第一天学习的相关知识
查看>>
LeetCode - Same Tree
查看>>
Python dict get items pop update
查看>>
[置顶] 程序员必知(二):位图(bitmap)
查看>>
130242014036-(2)-体验敏捷开发
查看>>
constexpr
查看>>
Nginx 流量和连接数限制
查看>>
课堂作业1
查看>>
IE8/9 本地预览上传图片
查看>>
Summary of CRM 2011 plug-in
查看>>
Eclipse+Maven环境下java.lang.OutOfMemoryError: PermGen space及其解决方法
查看>>
安全漏洞之Java
查看>>
Oracle 组函数count()
查看>>
Session的使用过程中应注意的一个小问题
查看>>
SDK,API,DLL名词解释
查看>>
试探算法
查看>>
jquery.validation.js 使用
查看>>
数据库高级查询
查看>>