Uva11468 AC自動機 概率dp

2021-06-18 04:21:24 字數 875 閱讀 2831

這題把ac自動機和dp結合了下,題意就是給你一些模式串,給你選擇每個字元的概率,讓你選擇l個字元,求不出現模式串的概率。

先把模式串都插入ac自動機,用乙個match陣列記錄該節點是否是單詞節點,特別注意下這裡單詞節點可能是從0節點開始,也肯能由字尾構成單詞節點,所以得加一句match[i]|=match[f[i]],即失配指標指向的點如果是單詞節點也可以構成改點。

這題的dp思想比較簡單:

dp[i][j]表示還有i個字母要選,當前在j這個節點。

dp[i][j]=sum 搜尋當前節點的所有不是單詞節點的子節點,乘以其概率求和。

**:#include#include#include#include#include#include#include#include#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define maxn 10005

#define inf 0xfffffff

#define mem(a,b) memset(a,b,sizeof(a))

#define for(i,s,t) for(int i=s;i<=t;i++)

#define ull unsigned long long

#define ll long long

#define m 62

#define n 444

using namespace std;

int getnum(char ch)

struct ac

void insert(char *s)

{int l=strlen(s);

int p=0;

for(int i=0;iq;

for(int i=0;i

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...

AC自動機演算法

ac自動機簡介 首先簡要介紹一下ac自動機 aho corasickautomation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和kmp...