UVa 1401 Remember the Word (Trie树模板题)

Android真机调试——ADB调试(含华为手机无法找到设备) 本文以Huawei Nova7为例。 阅读详情

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=505&page=show_problem&problem=4147


递推写法:

L = strlen(text);
for (i = L - 1; i >= 0; --i)
{
	trie.find_prefixes(text + i, L - i, p);
	for (j = 0; j < p.size(); ++j)
		cnt[i] = (cnt[i] + cnt[i + len[p[j]]]) % MOD; ///倒着递推
}


完整代码:
/*0.112s*/

#include<bits/stdc++.h>
using namespace std;
const int maxnode = 4000 * 100 + 5; /// trie树节点上限 = maxw * maxwl
const int sigma_size = 26;
const int maxl = 300000 + 5; /// 文本串最大长度
const int maxw = 4000 + 5;   /// 单词最大个数
const int maxwl = 100 + 5;   /// 每个单词最大长度
const int MOD = 20071027;

struct Trie
{
	int ch[maxnode][sigma_size]; /// ch[node_id][nextchar]表示第id号节点下的节点对应的id号
	int val[maxnode];
	int sz; /// 结点总数
	void clear() { sz = 1; memset(ch[0], 0, sizeof(ch[0])); } /// 初始时只有一个根结点

	/// 插入字符串s,附加信息为v。注意v必须非0,因为0代表“本结点不是单词结点”
	void insert(const char *s, int v)
	{
		int u = 0, n = strlen(s), c;
		for (int i = 0; i < n; ++i)
		{
			c = s[i] - 'a';
			if (ch[u][c] == 0)  /// 结点不存在
			{
				memset(ch[sz], 0, sizeof(ch[sz]));
				val[sz] = 0;  /// 中间结点的附加信息为0
				ch[u][c] = sz++; /// 新建结点
			}
			u = ch[u][c]; /// 往下走
		}
		val[u] = v; /// 字符串的最后一个字符的附加信息为v
	}

	/// 找字符串s的前缀(前缀长度<=len)
	void find_prefixes(const char *s, int len, vector<int>& ans)
	{
		int u = 0, c;
		for (int i = 0; s[i] && i < len; ++i)
		{
			c = s[i] - 'a';
			if (ch[u][c] == 0) break;
			u = ch[u][c];
			if (val[u]) ans.push_back(val[u]); /// 找到一个前缀
		}
	}
} trie;

int cnt[maxl], len[maxw], S;
char text[maxl], word[maxwl];

int main()
{
	int t = 0, i, j, L;
	vector<int> p;
	while (gets(text))
	{
		L = strlen(text);
		scanf("%d", &S);
		getchar();
		trie.clear();
		for (i = 1; i <= S; ++i)
		{
			gets(word);
			len[i] = strlen(word);
			trie.insert(word, i);
		}
		memset(cnt, 0, sizeof(cnt));
		cnt[L] = 1;
		for (i = L - 1; i >= 0; --i)
		{
			p.clear();
			trie.find_prefixes(text + i, L - i, p);
			for (j = 0; j < p.size(); ++j)
				cnt[i] = (cnt[i] + cnt[i + len[p[j]]]) % MOD;///倒着递推
		}
		printf("Case %d: %d\n", ++t, cnt[0]);
	}
	return 0;
}


STM32鱼塘水质监测系统设计与实现 物联网技术在农业领域的应用正逐步深入,其中传感器网络作为关键基础设施,通过实时数据采集与传输实现环境监测。基于STM32微控制器的嵌入式系统因其高性能和低功耗特性,成为物联网终端设备的理想选择。该系统通过DS18B20水温传感器、PH传感器和浊度传感器组成的多参数检测网络,配合4G通信模块实现水质数据的远程监控。在农业物联网场景中,这种解决方案不仅大幅降低了传统人工检测的成本,更能通过实时预警有效预防养殖损失。本文介绍的鱼塘水质监测系统正是这一技术的典型应用,展示了如何通过STM32和常见传感器构建高性价比 阅读详情

相关推荐

Hypermesh2021实战:塑料圆盘结构化网格划分全流程(附避坑指南)

本文详细介绍了使用Hypermesh2021进行塑料圆盘结构化网格划分的全流程操作,包括几何预处理、网格生成策略及质量验证。特别针对工程实践中常见的12个典型问题提供解决方案,帮助用户提升CAE仿真分析的精度和效率。

weixin_29294597的博客 318

UVA - 1401-------trie&&dp

Remember the Word UVA - 1401(传送门) 题意: 给你一个字典。和一个模式串。 现在要求你按照字典分割模式串。 求: 方案数。 思路: 很容易想到递推的思想。 一般思路: 先

qq_45377553的博客 176

LiblibAI新手教程:从零开始训练你的第一个LoRA模型(保姆级指南)

本文提供LiblibAI平台上从零开始训练LoRA模型的保姆级教程,涵盖数据准备、参数优化到效果调优全流程。详细解析LoRA技术优势,包括云端计算资源、自动化预处理工具等,帮助新手快速掌握自定义模型训练技巧,实现高效AI绘画创作。

dell8的博客 619

uva 1401 字典树模板

f[i] += f[j] i

chromosome24k的博客 250

S32K1XX调试--快速定位HardFault

1、背景 程序运行,发现程序跑飞到HardFault,但不清楚为什么会跑到HardFault中断处理函数去。 2、分析 要想知道为什么会跑到HardFault_Handler中去,就很有必要了解一下,程序上一条执行的是那条命令。 根据汇编指令可以定位上条指令,但如果对汇编指令不是很了解的话,那就很头疼了 根据单步运行也能实现定位,但如果程序量很大,又很杂,可能花费的时间就比较久些。 3、问题查找 提供一种不需要懂汇编指令的查找方法,方法如下: 在中断处理函数中插入以下代码,以及另外定义

ping_devil的博客 4018

MD01和MD01N比较

摘要:MD01(传统MRP)与MD01N(MRP Live)是SAP系统不同版本的物料需求计划事务码。核心差异包括:MD01N取消MRP列表、简化计划规则、合并MPS/MRP操作、采用BAdI技术等,体现S/4HANA平台简化、标准化和智能化的演进方向。MD01N通过优化参数配置、增强筛选功能、利用HANA实时计算能力,实现了更高效的物料计划流程,代表了新一代计划引擎的技术革新。

SAP_LES_COM的博客 891

uva1401

#include <iostream> #include <istream> #include <sstream> #include <vector> #include <stack> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <cstring&gt

小刀刺大熊 162

XCP详解「3.1·ASAP2新建A2L文件」

后面是ASAP2新建A2L的操作步骤,如果是APE中新建的A2L就无需以下操作,APE只需要导入现成的A2L即可。退出点击保存时会提示保存A2L文件,是因为前面导出的是1.70版本,工程最低1.71,可以另外起个名字即可。导入elf文件,elf路径建议直接索引编译生成的Debug下的,防止编译后忘记更新。导出V1.70格式A2L文件,APE17支持V1.70。通过ASAP2生成需要A2L文件更常用些。同一个信号可以创建不同属性量。ASAP2中新建A2L文件。设置标定信号数量最大值。XCP详解「总目录」

光明磊学习&积累的地方 3059

uva 1401

Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowingthat Ray has a photographic memory and this may not trouble him, Neal gives it to Jiejie.Since Jieji...

weixin_30414155的博客 178

【FISCO-BCOS】十一、一键部署

一键部署包括以下服务:节点(FISCO-BCOS 2.0+)、管理平台(WeBASE-Web)、节点管理子系统(WeBASE-Node-Manager)、节点前置子系统(WeBASE-Front)、签名服务(WeBASE-Sign)。部署成功后,登录此网站:http://localhost:5000 访问WeBASE管理平台。快速搭建WeBASE管理台环境,方便用户快速体验WeBASE管理平台。修改节点管理子系统和签名服务组系统的mysql数据库配置。如使用root账户:改为。配置方法:参考如下指令。

naihe_fish的博客 2596

诊断CAPL自动化(5) ——没有CANdela,无法编辑cdd数据库文件,也能轻松完成诊断测试

🍅我们知道cdd数据库文件,是CANoe测试环境的重要组件,它可以让我们更加轻松的完成诊断测试工作;但是创建和编辑cdd文件是需要CANdela 来完成的,一个 liscense 就要将近二十万,成本确实高🍅特别是在处理22/2E/31服务的时候,频繁的增加功能,可能需要频繁的用CANdela 修改CDD,我测试开发过程中,一般很少去修改cdd,有这个时间,纯手撸也开发完了,就一个CANdela,鬼知道此时此刻到了谁手里,我也懒得去找。🍅演示软硬件环境;目录📘前言。

蚂蚁小兵 5756

UVA1401 - Remember the Word(字典树+DP)

Time limit: 3.000 seconds Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing that Ray has a photographic memory and this may not trouble him, Neal gi...

jinghui_7的博客 283

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

UVa 1401 Remember the Word

本文探讨了如何高效计算字符串划分方式数的问题。给定一个长字符串和单词字典,要求将字符串划分为字典中的单词组合,计算所有可能的划分方式数。通过分析直接动态规划方法的高复杂度(O(n×S×L)),提出使用Trie树优化匹配过程,将复杂度降至O(n×100)。具体实现包括构建Trie树存储字典单词,利用动态规划数组记录前i个字符的划分方式数,并在每个位置最多匹配100个字符进行状态转移。最终算法通过结合Trie树和动态规划,有效解决了大规模字符串划分的计数问题。

寂静山林 642

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

UVA 1401 Remember the Word

题意:给出一个字符串和S个单词组成的字典,问把这个字符串分解成若干单词的连接,总共有多少种?(单词可重复) 解析:这是刘汝佳白皮书的关于Trie树的入门,也是我接触的第一题。总的思路就是可以用递推来求到底有多少种分解方法。假如用d[i]表示从第i个字符开始往后的后缀字符串的分解方法,即s[i]->s[len]  (len为字符串长度)之间的字符串。 那么假如说在s[i...len]的字符串中发

u010489766的专栏 972

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

UVA1401 Remember the Word

Trie + DP

a free man 672

【Trie】 UVA1401 Remember the Word

【代码】【Trie】 UVA1401 Remember the Word。

2401_89382924的博客 568

UVa1401 Remember the Word(DP+Trie树)

题目给定一个字符串集合有几种方式拼成一个字符串。 dp[i]表示stri...strlen-1的方案数 dp[len]=1 dp[i]=∑dp[j](stri...strj-1∈SET) 用集合的字符串构造一棵Trie树,然后就可以在线性时间判断哪几个前缀字符串在集合里。 1 #include<cstdio> 2 #include<cstri...

dengliugong3918的博客 143

uva 1401Remember the Word(trie树+dp)

题意:给一个由s个单词组成的字典和一个长字符串。把这个字符串分解成若干个单词的连接(单词可重复使用),有多少种方法? 思路:令d(x)表示从字符i开始的字符串(即后缀s[i....L])的分解方案数,则d(i)=sum{d+len(x) | 单词x是s[i...L]的前缀}。          所以可以先把单词写入trie树,然后从从后往前在长串的每个位置找前缀即可。 #include #i

AC之路 457

Uva1401/LA3942 Remember the Word(trie模板)

LRJ书上例题,但是自己在思考过程中挺有收获。。。。 UVA1401题目直达 题目大意是拆解字符串,有几种方法。 简单思路:设dp[i]dp[i]为字符串从第i位开始的拆解方法;仔细一想的话就会发现这样的关系:dp[i]=∑j∈[1,S]dp[i+len[j]]dp[i]=\sum_{j\in[1,S]} dp[i+len[j]] 其中SS为单词总数,j为单词编号。 使用trie可以实现,

VOCACODE 456

【UVA1401】Remember the Word Trie+dp

题目大意:给定一个字符串和一个字符串集合,问从集合中选出若干个串组成给定母串的不同方案数。 题解:有些类似于背包问题。状态很好表示,为:\(dp[i]\) 表示母串前 i 个字符的不同方案数,因此,有状态转移方程为:\[dp[i]=\sum dp[j],s[j+1...i]=s_0,s_0\in set\] ,可以发现若枚举 \(j < i\) 作为决策集合的话,时间复杂度将是 \...

K1385170的博客 168

UVA1401 Remember the word DP+Trie

问题描述 洛谷(有翻译) 题解 DP,设\(opt_i\)代表前\(i\)个字符方案数。 Trie优化,刷表法。 \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; template <typename Tp> void read(Tp &x){ x=0;char ch...

LIUZHH2088的博客 218

uva1401 Remember the Word

dp+trie树

YHaX的博客 546

UVA 1401 - Remember the Word(Trie+DP)

UVA 1401 - Remember the Word [题目链接] 题意:给定一些单词。和一个长串。问这个长串拆分成已有单词,能拆分成几种方式 思路:Trie,先把单词建成Trie。然后进行dp。dp[i]表示以i为开头的情况,然后每一个状态仅仅要在Trie树上找到对应的i开头的单词,然后dp[i] = sum{dp[i + len]}进行状态转移就可以...

aofan9566的博客 166

题解 UVA1401 【Remember the Word】

题目链接:Link Solution 第一次写Trie,写篇题解纪念一下...... 令d(i)表示从字符i开始的字符串(即后缀 S[i...L-1])的分解方案数,则d(i)=sum{d(i+len(x)) | 单词x是 S[i...L-1]的前缀}。 显然,关键点就在判断前缀上。可以把所有的单词组织成Trie,然后试着在Trie中查找S[i...L-1],每找到一个单词节点,就状态转...

donglaishi1835的博客 183

Uva1401 Remember the Word

Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing that Ray has a photographic memory and this may not trouble him, Neal gives it to Jiejie. Since Jie...

叶上初阳_285557的博客 247

UVA 1401 Remember the Word(字典树+dp)

题目链接:https://vjudge.net/problem/UVA-1401 参考自:①https://www.cnblogs.com/xuqiulin/p/4034143.html ②《算法竞赛入门经典 训练指南》 刘汝佳 解题思路: ① 首先想到dp的思路,dp[i]表示str[0]~str[i-1]的字符串可以分解成的单词的方法数目 那么dp[0]...

shadiao.的博客 274
上一篇: HDU 4745 Two Rabbits (最长回文变形)
下一篇: FZU 2112 Tickets (连通分量&欧拉通路)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值