UVA - 10029 Edit Step Ladders
来源:互联网 发布:淘宝壁纸一分钱互刷 编辑:程序博客网 时间:2024/05/21 16:58
记忆化搜索没什么问题,关键是建图,用到了哈希表,开始估计复杂度过高,但还是a了,有可能数据比较弱
#include<cstdio>#include<iostream>#include<cstring>#include<vector>#include<algorithm>#define MAX 26000#define HASHSIZE 500007using namespace std;char s[MAX][17];int words=0,head[HASHSIZE],next[MAX],amount[MAX];vector<int>edge[MAX];int hash(char *p){ int len=strlen(p),ret=0; for(int i=0;i<len;i++) ret=(ret*26+p[i]-'a')%HASHSIZE; return ret;}void insert(int index){ int hashvalue=hash(s[index]),u=head[hashvalue]; next[index]=u; head[hashvalue]=index;}void query(char *p,int index){ int hashvalue=hash(p),u=head[hashvalue]; while(u!=-1){ if(strcmp(p,s[u])==0){ if(u>index) edge[u].push_back(index); } u=next[u]; }}void add(int s_i){ int len=strlen(s[s_i]),index; char temp[18]; for(int i=0;i<=len;i++){ index=0; for(int j=0;j<len;j++,index++){ if(j==i){ temp[++index]=s[s_i][j]; } else{ temp[index]=s[s_i][j]; } } temp[len+1]=0; for(int j=0;j<26;j++){ temp[i]='a'+j; query(temp,s_i); } }}void delet(int s_i){ char temp[18]; int index,len=strlen(s[s_i]); for(int i=0;i<len;i++){ index=0; for(int j=0;j<len;j++,index++){ if(j==i){ index--; continue; } else temp[index]=s[s_i][j]; } temp[len-1]=0; query(temp,s_i); }}void change(int s_i){ char temp[18]; int len=strlen(s[s_i]); for(int i=0;i<len;i++){ strcpy(temp,s[s_i]); for(int j=0;j<26;j++){ if('a'+j==s[s_i][i]) continue; temp[i]=j+'a'; query(temp,s_i); } }}void build(){ for(int i=0;i<words;i++){ add(i); delet(i); change(i); }}int dfs(int index){ if(amount[index]!=-1) return amount[index]; amount[index]=0; int sizet=edge[index].size(); for(int i=0;i<sizet;i++){ amount[index]=max(amount[index],dfs(edge[index][i])+1); } return amount[index];}int main(){ memset(head,-1,HASHSIZE*4); memset(amount,-1,MAX*4); while(cin>>s[words]){ insert(words); words++; } build(); int ans=0; for(int i=0;i<words;i++){ dfs(i); ans=max(ans,amount[i]); } cout<<ans+1<<endl; return 0;}
0 0
- uva 10029 Edit Step Ladders
- UVA 10029 Edit Step Ladders
- UVA 10029 - Edit Step Ladders
- UVA 10029 - Edit Step Ladders
- uva 10029 - Edit Step Ladders
- UVA - 10029 Edit Step Ladders
- UVA - 10029 Edit Step Ladders
- UVa 10029 - Edit Step Ladders
- uva 10029 Edit Step Ladders
- PC/UVa 110905/10029 Edit Step Ladders
- uva 10029 Edit Step Ladders; POJ 2564
- UVA 10029 Edit Step Ladders(dp)
- Edit Step Ladders - UVa 10029 dp
- 10029 - Edit Step Ladders
- 10029 - Edit Step Ladders
- UVa Problem 10029 Edit Step Ladders (递变阶梯)
- uva 10029 - Edit Step Ladders(dp + 二分)
- UVA 10029 - Edit Step Ladders(记忆化搜索)
- php中memcache的使用 及 windows 中的memcache监控工具
- C#第四周作业
- 1.7
- Git学习总结
- win32练习 - 虚拟地址映射
- UVA - 10029 Edit Step Ladders
- VMWARE虚拟机CentOS使用NAT方式连接外网注意事项 自己mark一下
- Java8 Lambda
- 关闭或开启ARC
- 分糖果
- WebService的开发步骤
- win32练习-信号量
- Auto Layout和Size Class方面一些非常棒的文章和教程
- OpenCV成长之路(5):图像直方图的应用