UVA11468 Substring --- AC自动机 + 概率DP

UVA11468 Substring

题目描述:

给定一些子串T1...Tn

每次随机选择一个字符(概率会给出)

构造一个长为n的串S,求T1...Tn不是S的子串的概率

 

直接把T1...Tn建成AC自动机

把无法到达的节点打上标记

\(dp(i,j)\)表示长度为 i , 在 j 号节点的概率

初始\(dp(0,0) = 1\)

转移方程:\(dp(i,j)=\sum_{mark(trans(j,c))\: !=\: 1} dp(i,trans(j,c))*p(c)\)

但这样不方便转移,

考虑一个状态能转移到哪些状态来DP

最终结果为 \(\sum_{0 <= i <= ac.size} \; dp(i,n)\)

 

记得看题目数据范围(看错了长度范围,莫名调了1h)

 

代码在此

posted @ 2018-04-18 00:10  remoon  阅读(143)  评论(0编辑  收藏  举报