【Uvalive3942】Remember the Word——字典树+dp
来源:互联网 发布:网络兼职诈骗怎么报案 编辑:程序博客网 时间:2024/06/05 08:10
给你一个模式串和一些匹配串,问模式串由匹配串组成的方案数。将匹配串建成字典树,在字典树上进行dp。
#include <bits/stdc++.h>using namespace std;const int maxn = 310000;const int maxm = 123;const int mod = 20071027;struct node { bool op; int next[26];} trie[maxm*4000];int top;char str[maxm];char c[maxn];int Creat() { memset(trie[top].next,-1,sizeof(trie[top].next)); trie[top].op = false; return top++;}void Build(int root) { int len = strlen(str); int st ; for(int i = 0; i<len; i++) { st = str[i]-'a'; if(trie[root].next[st] == -1) trie[root].next[st] = Creat(); root = trie[root].next[st]; } trie[root].op = true;}int dp[maxn];int n,m;int dfs(int root,int index) { int ans = 0; for(int i = index; i<m; i++) { int st = c[i]-'a'; if(trie[root].next[st] == -1) return ans; root = trie[root].next[st]; if(trie[root].op) (ans +=dp[i+1])%=mod; } return ans;}int main() { int z = 1; while(~scanf("%s",c)) { top = 0; scanf("%d",&n); int root = Creat(); for(int i = 0; i<n; i++) { scanf("%s",str); Build(root); } memset(dp,0,sizeof(dp)); m = strlen(c); dp[m] = 1; for(int i = m -1; i>=0; i--) { (dp[i] += dfs(root,i))%=mod; } printf("Case %d: %d\n",z++,dp[0]); } return 0;}
1 0
- 【Uvalive3942】Remember the Word——字典树+dp
- uvalive3942 Remember the Word
- LA 3942 Remember the Word——DP + 字典树
- [UVALive3942] Remember the Word && 字符串
- UVALive 3942 Remember the Word 字典树DP&&前缀树
- LA 3942 - Remember the Word 字典树 dp
- LA 3942 - Remember the Word 字典树+DP
- UVA 1401 Remember the Word(DP+字典树Trie)
- uvalive 3942 Remember the Word 字典树+dp
- uva 1401 - Remember the Word(字典树+dp)
- UVALive - 3942 Remember the Word(字典树+dp)
- UVA 1401 & LA 3942 Remember the Word 字典树+DP
- UVALive 3942 Remember the Word(字典树+dp)
- UVALive 3942Remember the Word(字典树 + 简单dp)
- LA 3942 Remember the Word(字典树/树上dp)
- uvalive 3942 Remember the Word (字典树+DP)
- Uva 1401 Remember the Word 字典树+DP
- LA3942 Remember the Word(字典树+DP)
- 11.3.2、基于消息通信的RPC调用 之 RabbirMQ分析
- 电脑小知识
- 栈和堆
- Android开源特效常用链接大集合
- 大数据系列修炼-Scala课程100
- 【Uvalive3942】Remember the Word——字典树+dp
- Gradle中打jar包的方法,Gradle 自动化构建工具,Android Studio 中 Gradle 的使用方法,AndroidStudio使用过程中遇到的bug
- ListView的优化
- UE4系列引擎的setup.bat
- linux内核的编译
- 欢迎使用CSDN-markdown编辑器
- Buy Low, Buy Lower 逢低吸纳
- 并查集—1001 舒适的路线题解
- Codeforces Round #376 (Div. 2) C 并查集