浅谈\(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的更多相关文章

  1. Edit Step Ladders - UVA 10029

    题意 题目链接(Virtual Judge):Edit Step Ladders - UVA 10029 题意: 如果单词 \(x\) 能通过添加.删除或修改一个字母变换为单词 \(y\),则称单词 ...

  2. UVA - 10029 Edit Step Ladders (二分+hash)

    Description Problem C: Edit Step Ladders An edit step is a transformation from one word x to another ...

  3. UVa 10029 - Edit Step Ladders

    題目:已知一些字典序排列的單詞,問能從中找到最大的一個有序單詞集合, 使得集合中的單詞每一個是有上一個單詞經過一次變換得來的(增.刪.改). 分析:dp,LIS.最大遞增子序列,不過數據較大须要優化. ...

  4. UVA 10029 Edit Step Ladders ——(DAG求最长路)

    题意:升序的给出一本若干个单词,每个单词都可删除一个字母,添加一个字母或者改变一个字母,如果任意一个操作以后能变成另外一个字典中的单词,那么就连一条有向边,求最长的长度. 分析:DAG的最长路和最短路 ...

  5. uva 10026 Problem C: Edit Step Ladders

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  6. ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解

    原文 ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 ...

  7. 【译】ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解

    原文:[译]ASP.NET MVC 5 教程 - 7:Edit方法和Edit视图详解 在本节中,我们继续研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打 ...

  8. CF1245E:Hyakugoku and Ladders

    CF1245E:Hyakugoku and Ladders 题意描述: 给你一个\(10*10\)的矩阵,矩阵描述如下 最开始的时候你在左下角,你的目标是到达左上角. 你可以走路径或者爬梯子. 路径的 ...

  9. kylin Build过程问题排查:17 Step Name: Build Cube In-Mem

    Kylin Build执行到底17步时报错:17 Step Name: Build Cube In-Mem  ,错误截图如下: 点左下角的MRJob图标,打开查看错误信息: 从MRJob中的描述中可见 ...

随机推荐

  1. program发展史及以后预测

    三个阶段:第一个阶段是1950年代到1960年代,是程序设计阶段,基本是个体手工劳动的生产方式.这个时期,一个程序是为一个特定的目的而编制的,软件的通用性是很有限的,软件往往带有强烈的个人色彩.早期的 ...

  2. 威佐夫博弈——hdu1527

    有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利. 直接说结论了,若两堆物品的初始值为(x,y),且x<y,则另z=y-x: 记w= ...

  3. Java导出Excel(有数据库导出代码)

    /** * 导出 * @param request * @param response * @throws Exception */ @SuppressWarnings("unchecked ...

  4. TCP的time_wait、close_wait状态

    转载:http://huoding.com/2013/12/31/316  http://blog.csdn.net/lxnkobe/article/details/7525317  http://k ...

  5. 【zznu-夏季队内积分赛3-G】2333

    题目描述 “别人总说我瓜,其实我一点也不瓜,大多数时候我都机智的一批“ 宝儿姐考察你一道很简单的题目.给你一个数字串,你能判断有多少个连续子串能整除3吗? 输入 多实例输入,以EOF结尾,每行一个数字 ...

  6. 淘宝TDDL深入浅出

    前言 在开始讲解淘宝的 TDDL(Taobao Distribute Data Layer) 技术之前,请允许笔者先吐槽一番.首先要开喷的是淘宝的社区支持做的无比的烂, TaoCode 开源社区上面, ...

  7. Ubuntu 13.10 如何修改背景色--豆沙绿

    如何修改Ubunut 13.10的窗口背景色,在网上找到了多资料,安装了dconf,Unity Tweak Tool,GNOME Color Chooser都无法修改背景色. 最后,还是直接去修改主题 ...

  8. Jquery EasyUI Tree树形结构的Java实现(实体转换VO)

    前一阵做的OA项目,有一个是组织架构的树,因为是分开做的,我做的是Controller和页面,其他组做的Service和Dao,因为之前一直没有商量页面用什么框架做比较好,导致,Dao层取出来的数据都 ...

  9. vue 错误记录

    1.错误信息: You may use special comments to disable some warnings.Use // eslint-disable-next-line to ign ...

  10. OC-字符串、数组、字典总结

    #import <Foundation/Foundation.h> /* ∆以NSMutable开头的都是可变类型,以NSMutable开头定义的对象都是可以对数据进行修改: NSStri ...