HDU 3247. Resource Archiver (AC自动机+bfs+DP)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=3247

题意:
给定n个串,将他们放在一个串s中,可以重叠;
给定m个串,要求s中不能出现这m个串;
问s最小多长。

分析:
两篇很好的题解:
https://blog.csdn.net/woshi250hua/article/details/8021283
https://www.cnblogs.com/Konjakmoyu/p/5665802.html

代码:

#include 
using namespace std;
typedef long long llong;
const int tmax=6e4+5;
int n,m,pos[15],cost[15][15],dis[tmax],dp[1100][15],length[15];
queue Q;
struct AC{
    int cnt,ch[tmax][2],f[tmax],val[tmax],last[tmax];
    void init()
    {
        cnt=0;
        memset(ch,0,sizeof(ch));
        memset(f,0,sizeof(f));
        memset(val,-1,sizeof(val));
        memset(last,0,sizeof(last));
        return;
    }
    int insert(char *s,bool tag)
    {
        int len=strlen(s),u=0,id;
        for(int i=0;i

你可能感兴趣的:(字符串,动态规划,AC自动机,搜索)