题意:容易理解...
分析:题目中给的模式串的个数最多为10个,于是想到用状态压缩dp来做,它的状态范围为1-2^9,所以最大为2^10-1,那我们可以用:dp[i][j][k]表示长度为i,在trie树上的状态为j,压缩后的状态为k时的情况,知道怎么压缩之后这道题就是一道简单的ac自动机+压缩dp题了。
代码实现:
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<queue> #include<cmath> using namespace std; struct node{ int next[4]; int fail; int flag; void init() { memset(next,0,sizeof(next)); fail=0; flag=0; } }a[1005]; int n,len,tot; int weight[15]; char keyword[105]; int dp[2][1005][1<<10]; void chushihua() { tot=0; a[0].init(); memset(dp,0,sizeof(dp)); } int hash(char x) { if(x=='A') return 0; else if(x=='C') return 1; else if(x=='G') return 2; else return 3; } void insert(char *str,int biaohao) { int p=0,index; for(;*str!='