1、给一个串,在给一个单词集合,求用这个单词集合组成串,共有多少种组法。

例如:串 abcd, 单词集合 a, b, cd, ab

组合方式:2种:

a,b,cd

ab,cd

2、把单词集合建立字典树,然后从后向前dp,dp[i]=dp[i]+dp[i+len(x)]; 其中x为当前找到的前缀长度。

3、

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std; #define MAX 26
#define MOD 20071027 int dp[]; struct Trie
{
Trie *next[MAX];
int v; //根据需要变化,1代表无此单词,-1代表有此单词
};
Trie *root; void createTrie(char *str)
{
int len = strlen(str);
Trie *p = root, *q;
for(int i=; i<len; ++i)
{
int id = str[i]-'a';
if(p->next[id] == NULL)
{
// q = (Trie *)malloc(sizeof(Trie));
q = new Trie;
q->v = ; //初始v==1
for(int j=; j<MAX; ++j)
q->next[j] = NULL;
p->next[id] = q;
}
p = p->next[id];
}
p->v = -; //若为结尾,则将v改成-1表示
}
int findTrie(char *str,int mI,int len)
{
int ret=;
//int len = strlen(str);//每次都计算,很浪费时间
Trie *p = root;
for(int i=mI; i<len; ++i)
{
int id = str[i]-'a';
p = p->next[id];
if(p == NULL) //若为空集,表示不存以此为前缀的串
return ret;
if(p->v == -){ //字符集中已有串是此串的前缀
ret=(ret+dp[i+])%MOD;
}
}
return ret;
}
int deleteTrie(Trie* T)
{
int i;
if(T==NULL)
return ;
for(i=; i<MAX; i++)
{
if(T->next[i]!=NULL)
deleteTrie(T->next[i]);
}
//free(T);
delete(T);
return ;
}
int main()
{
char str[];
char str2[];
int i,S,len,mCase=;
while(~scanf("%s",str)){
root=new Trie;
for(i=; i<MAX; i++)
root->next[i]=NULL;
memset(dp,,sizeof(dp));
len=strlen(str);
scanf("%d",&S);
while(S--){
scanf("%s",str2);
createTrie(str2);
} dp[len]=;
for(i=len-;i>=;--i)
dp[i]=findTrie(str,i,len); printf("Case %d: %d\n",++mCase,dp[]);
delete(root);
}
return ;
}

最新文章

  1. ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
  2. Hibernate criteria 增加排序项
  3. KVO 键值观察者
  4. 今天携程出事了:让我们来学习下http的响应码
  5. centos6 pyotp bug修复
  6. 使用MVC和EF,在保存数据的时候报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
  7. NGINX + LUA实现复杂的控制 --源自http://outofmemory.cn/code-snippet/14396/nginx-and-lua
  8. zabbix安装排错过程
  9. c#基础,面试前迅速巩固c#最基础知识点
  10. jQuery Callback 函数
  11. 使用ReactiveCocoa开发RSS阅读器
  12. UML问题
  13. 高级UIKit-10(UDPSocket)
  14. sun.misc.BASE64Encoder我找不到jar一揽子解决方案
  15. 针对Openlayer3官网例子的简介
  16. Android查缺补漏(IPC篇)-- 进程间通讯之Socket简介及示例
  17. Java中导出到Excel实现_aspose.cells
  18. WebApiClient百度地图服务接口实践
  19. python高级-动态特性(20)
  20. laravel 多检索条件列表查询

热门文章

  1. kissy学习
  2. MQ报错java.lang.IllegalStateException: Failed to load ApplicationContext
  3. 【三分+精度问题】G. Toxophily
  4. hdu 2845
  5. bzoj5090组题 分数规划
  6. C++常见函数(备忘录)
  7. msp430项目编程16
  8. IText 生成pdf,处理table cell列跨页缺失的问题
  9. 离线配置Anaconda3+tensorflow-gpu1.4.0+cuda8.0+cudnn6.0
  10. Space Ant--poj1696(极角排序)