题目链接:https://vjudge.net/problem/UVALive-3942

本篇是刘汝佳《算法竞赛入门经典——训练指南》的读书笔记(复述),详见原书 \(P209\) .

解题思路:

  先用字典树维护字典中所有的单词。

  定义 \(f(x)\) 为以长字符串中第 \(x\) 个字符开始的字符串的分解方案数,则 \(f(x) = sum{f(x+len(i))}\) ,其中 \(i\) 是该字符串的所有前缀。

  用一种类似 \(DFS\) 的方式解决这个问题。

  注意:书中的模数写错了。

AC代码:

 #include <bits/stdc++.h>

 using namespace std;
typedef long long ll;
const ll mod = ;
const int maxn = +;
char inp[maxn];
struct Trie{
int ch[][];
int val[];
int sz;
void inserts(char *s,int v){
int u=,n=strlen(s);
for(int i=;i<n;i++){
int c=s[i]-'a';
if(!ch[u][c]){
memset(ch[sz],,sizeof(ch[sz]));
val[sz]=;
ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=v;
}
};
Trie tree;
ll f[maxn]; ll solve(int head,int tail){
if(f[head]!=-) return f[head];
int now=;
ll ret=;
for(int i=head;i<tail;i++){
int c=inp[i]-'a';
int Next=tree.ch[now][c];
if(Next==){
f[head]=ret;
return ret;
}
if(tree.val[Next])
ret=(ret+solve(i+,tail))%mod;
now=Next;
}
f[head]=ret;
return ret;
}
int main(){
char word[];
int kase=;
while(scanf("%s",inp)==){
int S;
memset(f,-,sizeof(f));
tree.sz=;
memset(tree.ch[],,sizeof(tree.ch[]));
scanf("%d",&S);
while(S--){
scanf("%s",word);
tree.inserts(word,);
}
int tail=strlen(inp);
f[tail]=;
printf("Case %d: %lld\n",kase++,solve(,tail));
}
return ;
}

最新文章

  1. 《饥荒游戏》SW BUG 刷猴子 &amp; 刷淘气值 办法
  2. XOR Swap
  3. Dynamic CRM 2013学习笔记(四十五)修改实体及字段的前缀(不用new_开头)
  4. Asp.Net 三层架构之泛型应用
  5. ViewConfiguration.getScaledTouchSlop () 用法
  6. asp.net控件开发基础(1)(转)原文更多内容
  7. Java基础(60):Java打包生成Jar和Javadoc说明文档,以及在另外的工程中导入和使用自己的Jar
  8. N年后给自己一些忠诚的建议
  9. POJ 2955 Brackets 区间合并
  10. bzoj 2285 [Sdoi2011]保密(二分,spfa + 最大流)
  11. Redundant Call to Object.ToString()
  12. iOS navigationBar导航栏底部与self.view的分界线的隐藏
  13. Hadoop的基本命令【转载】
  14. 【每日一摩斯】-Troubleshooting: High CPU Utilization (164768.1) - 系列4
  15. 自定义MVP .net框架
  16. VS2010 c/c++ 本地化 emscripten 配置
  17. 基于 HTML5 WebGL 的 3D SCADA 主站系统
  18. ios 添加三方字体
  19. Pycharm 安装 idea VIM
  20. Android开发中遇到的问题(一)——Android模拟器端口被占用问题的解决办法

热门文章

  1. mysql 之 清空表中数据
  2. Java程序员必备基础结构图
  3. Alpine Linux 3.9.2 发布,轻量级 Linux 发行版
  4. 解决layui动态追加的点击事件不起作用问题
  5. The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 B so easy
  6. python进程/线程/协程
  7. C. Yet Another Counting Problem(循环节规律)
  8. kafka简介及集群部署
  9. java基础篇 之 接口
  10. MySQL基础总结(三)