hdu 2296 Ring AC自动机DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2296

出了很奇怪的re问题,可能是用memset清除string类型的数组会RE?

最后改了一个保证输出字典序最小就过了???

初始化需要将dp数组置为-1,置dp00=0;-1表示不可达状态

细节比较多的AC自动机DP

#include

using namespace std;

const int maxn=2000;///多个模式串长度
const int N=60;///文章长度
const int lettersize=26;///看种类


char s[110][15];
char no[N];
int dp[60][maxn];
string jilu[60][maxn];


const int MAX=1e6+10;
struct Trie
{
    int next[MAX][lettersize],fail[MAX],end[MAX];
    int root,L;
    int deep[MAX];
    int newnode(int x)
    {
        for (int i=0;iQ;
        fail[root]=root;
        for (int i=0;idp[i][son])
                    {
                         dp[i][son]=dp[i-1][j]+ac.end[son],jilu[i][son]=str;
//   
                    }
                    else if(dp[i-1][j]+ac.end[son]==dp[i][son])
                        if(str maxx)
                    maxx=dp[i][j],str=jilu[i][j];//printf("jilu %d %d=",i,j),cout << str << endl ;
                else if(dp[i][j]==maxx)
                {
                     if(jilu[i][j]

 

你可能感兴趣的:(DP,ac自动机,AC自动机DP)