uva3942 字典树加dp
来源:互联网 发布:淘宝联盟已收货不结算 编辑:程序博客网 时间:2024/06/08 07:12
#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <cmath>#include <cstring>#include <stack>#include <set>#include <map>#include <vector>using namespace std;#define INF 0x2fffffff#define LL long long#define MAX(a,b) ((a)>(b))?(a):(b)#define MIN(a,b) ((a)<(b))?(a):(b)#define id(a) ((a-'a'))char s[300005];int sz;const int maxnode = 4000*100+100;int ch[maxnode][26];int val[maxnode];int dp[300005];void insert(char *s){ int n = strlen(s); int u = 0; for(int i = 0;i < n;i++){ int c = id(s[i]); if(!ch[u][c]){ val[sz] = 0; memset(ch[sz],0,sizeof(ch[sz])); ch[u][c] = sz ++; } u = ch[u][c]; } val[u] = 1;}int query(int loc,int c){ int u = 0; int n = loc + c; for(int i = loc;i <= n;i++){ int c = id(s[i]); if(!ch[u][c]){ return false; } u = ch[u][c]; } return val[u];}int main(){ int cc = 1; while(scanf("%s",s)!=EOF){ int t; int len = strlen(s); memset(ch[0],0,sizeof(ch[0])); memset(dp,0,sizeof(dp)); sz = 1; scanf("%d",&t); char a[200]; while(t--){ scanf("%s",a); insert(a); } dp[len] = 1; for(int i= len-1;i >=0 ;i--){ for(int j = 0;j < 100 && j+i < len;j++){ if(query(i,j)){ dp[i] += dp[i+j+1]; dp[i] %= 20071027; } } } printf("Case %d: %d\n",cc++,dp[0]); } return 0;}
开始的时候采用记忆化搜索超时了,换成dp就可以过了,dp就是非递归的记忆化搜索!
0 0
- uva3942 字典树加dp
- UVA3942(字典树加DP)
- LA 3942 Remember the word(字典树加DP)wa到吐血。。
- 字典树 (解析加模版)
- 字典树 (解析加模版)
- 字典树 + DP
- LA3942 字典树+ dp
- zoj3013Word Segmenting (字典树+dp)
- NEU 1007 (字典树 DP)
- Find MaxXorSum 字典树+DP
- UVa 1401 字典树+DP
- UVALive 3942 字典树+dp
- EOJ-3261 字典树 + dp
- uva_644暴力加字典树解法
- Xor Sum(字典树加贪心)
- EOJ 3261 字典树+dp 字典树模版
- NEFU English Game 字符串 dp 字典树
- nefu 680(字典树DP)
- 个人对Web组成的一些认识
- QT4文件搜索的例子
- JavaScript学习要点(十二)
- div+css
- Objects and Data Structures
- uva3942 字典树加dp
- 我是菜鸟:java内存及内存溢出异常
- HD 2037 今年暑假不AC 【贪心】
- [c]HDOJ 1869 六度分离
- 迷宫问题
- 递归和循环---从EasyUI Tree 发现自己的硬伤
- 树懒_移动开学笔记_day09_jsp
- HTTP基本知识概况
- HD 2187 悼念512汶川大地震遇难同胞——老人是真饿了 【背包问题】