首页 技术 正文
技术 2022年11月18日
0 收藏 580 点赞 3,022 浏览 838 个字

题意

给定一个字符串和若干个单词,询问能把字符串分解成这些单词的方案数。比如abcd ,有单词a,b,ab,cd:就可以分解成a+b+cd或者ab+cd。

分析

trie树—>DP

代码

(感谢qrc巨神的细心指导,并不是很细心的我竟然也AC了,qrc太巨了!)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MNODE 400000
#define mod 20071027
int trie[MNODE][],cntnode;
bool tag[MNODE];
int dp[];
void init(int x,char *s,int i){
if(i==strlen(s)) {tag[x]=;return;}
char c=s[i];
if(!trie[x][c-'a']) trie[x][c-'a']=++cntnode;
init(trie[x][c-'a'],s,i+);
}
int main(){
char s[];
int S;
int cas=;
while(scanf("%s",s)!=EOF){
memset(trie,,sizeof(trie));
memset(tag,,sizeof(tag));
cntnode=;
scanf("%d",&S);
char ss[];
while(S--) scanf("%s",ss),init(,ss,);
memset(dp,,sizeof(dp));
dp[]=;
for(int i=;i<strlen(s);i++){
int now=;
for(int j=i;j<strlen(s);j++){
if(trie[now][s[j]-'a']) now=trie[now][s[j]-'a'];
else break;
if(tag[now]) dp[j+]=(dp[j+]+dp[i])%mod;
}
}
printf("Case %d: %d\n",++cas,dp[strlen(s)]);
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,103
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,579
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,427
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,199
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,834
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,917