POJ2564:Edit Step Ladders
浅谈\(Trie\):https://www.cnblogs.com/AKMer/p/10444829.html
题目传送门:http://poj.org/problem?id=2564
记\(f[i]\)表示从第\(i\)个字符串开始可以变换多长。
每次把当前字符串在\(Trie\)树上搜索,设\(dp(ID,u,len,bo)\)表示我把第\(ID\)个字符串在\(Trie\)树上搜索,到了\(u\)这个点,已经处理了\(len\)位,并且是否做过改动。
修改就走除了下一个字符以外的边继续搜,插入就枚举\(26\)条边依次去搜但是不加\(len\),删除就是再次访问当前节点不过让\(len=len+1\)
当\(len\)等于字符串长度的时候和当前点表示的那一号字符串的\(f_{u}+1\)取\(max\)即可。
答案就是\(f\)的最大值加一。
时间复杂度:\(O(n*len^2*26)\)
空间复杂度:\(O(n*len*26)\)
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=25005;
int n=1,ans;
char s[maxn][20];
int f[maxn],Len[maxn];
struct Trie {
int tot;
int id[maxn*16];
int son[maxn*16][26];
void ins(int ID) {
int pos=1,len=strlen(s[ID]+1);
for(int i=1;i<=len;i++) {
if(son[pos][s[ID][i]-'a'])
pos=son[pos][s[ID][i]-'a'];
else pos=son[pos][s[ID][i]-'a']=++tot;
}
id[pos]=ID;
}
void dp(int ID,int u,int len,int bo) {
if(len==Len[ID]) {
if(id[u]&&bo)return;
if(id[u])f[ID]=max(f[ID],f[id[u]]+1);
if(bo) {
for(int i=0;i<26;i++)
if(id[son[u][i]])f[ID]=max(f[ID],f[id[son[u][i]]]+1);
}
return;
}
int c=s[ID][len+1]-'a';
if(son[u][c])dp(ID,son[u][c],len+1,bo);
if(bo) {
for(int i=0;i<26;i++) {
dp(ID,son[u][i],len,0);
if(i!=c)dp(ID,son[u][i],len+1,0);
}
dp(ID,u,len+1,0);
}
}
}T;
int main() {
T.tot=1;
while(~scanf("%s",s[n]+1))n++;
for(int i=1;i<n;i++) {
Len[i]=strlen(s[i]+1),T.dp(i,1,0,1);
ans=max(ans,f[i]),T.ins(i);
}
printf("%d\n",ans+1);
return 0;
}
POJ2564:Edit Step Ladders的更多相关文章
- Edit Step Ladders - UVA 10029
题意 题目链接(Virtual Judge):Edit Step Ladders - UVA 10029 题意: 如果单词 \(x\) 能通过添加.删除或修改一个字母变换为单词 \(y\),则称单词 ...
- UVA - 10029 Edit Step Ladders (二分+hash)
Description Problem C: Edit Step Ladders An edit step is a transformation from one word x to another ...
- UVa 10029 - Edit Step Ladders
題目:已知一些字典序排列的單詞,問能從中找到最大的一個有序單詞集合, 使得集合中的單詞每一個是有上一個單詞經過一次變換得來的(增.刪.改). 分析:dp,LIS.最大遞增子序列,不過數據較大须要優化. ...
- UVA 10029 Edit Step Ladders ——(DAG求最长路)
题意:升序的给出一本若干个单词,每个单词都可删除一个字母,添加一个字母或者改变一个字母,如果任意一个操作以后能变成另外一个字典中的单词,那么就连一条有向边,求最长的长度. 分析:DAG的最长路和最短路 ...
- uva 10026 Problem C: Edit Step Ladders
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解
原文 ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 ...
- 【译】ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解
原文:[译]ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解 在本节中,我们继续研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打 ...
- CF1245E:Hyakugoku and Ladders
CF1245E:Hyakugoku and Ladders 题意描述: 给你一个\(10*10\)的矩阵,矩阵描述如下 最开始的时候你在左下角,你的目标是到达左上角. 你可以走路径或者爬梯子. 路径的 ...
- kylin Build过程问题排查:17 Step Name: Build Cube In-Mem
Kylin Build执行到底17步时报错:17 Step Name: Build Cube In-Mem ,错误截图如下: 点左下角的MRJob图标,打开查看错误信息: 从MRJob中的描述中可见 ...
随机推荐
- python 数组中如何根据值,获取索引,如何根据索引删除值 , 以及如何根据值删除值
假设有一数组 s = [1,2,3,4,5,6,7,8,9] (1)如何根据值获取索引 ,如果值为5 , 那对应的索引为? (2)如何根据索引删除值 , 删除数组中索引5对应的值: (3)根据数组中的 ...
- Python之匿名函数(filter,map,reduce)
参考博客:Python匿名函数详解--http://blog.csdn.net/csdnstudent/article/details/40112803 Python内建函数之——filter,map ...
- [javascript]巧用sourcemap快速定位javascript中的问题
大家都有过用-min.js开发的经历,但这样的脚本调试非常头疼.如果使用为压缩版的,上线前又要去压缩,sourcemap的出现完美解决了这一问题. 即便是chrome提供了格式化代码但阅读压缩后的代码 ...
- cat 命令|more命令|less命令
cat主要有三大功能:1.一次显示整个文件:cat [-n] filename2.从键盘创建一个文件:cat > filename 3.将几个文件合并为一个文件:cat file1 file2 ...
- date.timezone not set in php.ini. Please contact ...解决方案
无论是在LAMP还是在LNMP系统环境下, 只要PHP的版本在5.3及其以上的版本时, 无论是在安装oscommerce, 还是在安装zen cart, 以及其他的CMS时, 都会遇到如下所示的错误信 ...
- 创建自定义JSR303的验证约束(Creating custom constraints)
转载:http://clongjava.iteye.com/blog/1317649 由于输入验证在软件开发中是必须的一件事情,特别是与用户交互的软件产品,验证用户的潜在输入错误是必不可少的一件事情, ...
- springmvc日期格式化
jsp页面String类型转Controller后台Date类型 方法1.在实体中加入日期格式化注解 @DateTimeFormat(pattern="yyyy-MM-dd") p ...
- 利用 LINQ的skip和Take 方法对List实现分页效果
var testList=new List<string>(); )).Take(pageSize); //skip是跳过的条数,pageSize*(pageIndex-),Take 是返 ...
- UML_02_概述
一.前言 UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言 二.分类 UML 的核心是图表,大致可以将 ...
- I/O流+统计文件词频
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...