洛谷P1019 单词接龙
2016-10-29 14:19
232 查看
#include<iostream> #include<cstdio> #include<cmath> #include<iomanip> #include<cstring> #include<string> #include<bitset> #include<vector> #include<stack> #include<queue> #include<map> #include<set> #include<algorithm> #include<cstdlib> using namespace std; int n,maxn,side[21][21],visited[20]; string word[21];//把首字母也当做一个单词,但只能在开头用一次 void calc(int i,int j)//计算word[j]接到word[i]后面增加的长度 { int len=word[i].length()<word[j].length()?word[i].length():word[j].length(); int k,l=0; while(l<len) { l++; for(k=0;k<l;k++) if(word[i][word[i].length()-k-1]!=word[j][l-k-1]) break; if(k==l) { side[i][j]=word[j].length()-l; break;//首先确定能接上的长度必然是最长的,直接退出 } } if(i>j) calc(j,i);//i接j和j接i两种情况 } void dfs(int i,int len) { int j; if(len>maxn) maxn=len; for(j=0;j<n;j++) if(side[i][j]>0&&visited[j]<2) { visited[j]++; dfs(j,len+side[i][j]);//传递新的长度 visited[j]--; } } int main() { cin>>n; for(int i=0;i<=n;i++) { cin>>word[i]; for(int j=0;j<=i;j++) calc(i,j); } dfs(n,1); cout<<maxn; return 0; }
相关文章推荐
- 洛谷1019 单词接龙
- 洛谷18-03-12-P1019 单词接龙
- luogu1019【2000提高】单词接龙(字符串+dfs)
- 洛谷 P1019 单词接龙
- 洛谷 P1019 单词接龙
- [luoguP1019] 单词接龙(DFS)
- 洛谷 P1019 单词接龙
- 洛谷 P1019 单词接龙
- 洛谷 P1019 单词接龙
- 洛谷 P1019 单词接龙【经典DFS,温习搜索】
- 【NOIP2000】【Luogu1019】单词接龙
- [NOIP2000] 提高组 洛谷P1019 单词接龙
- 洛谷 P1019 单词接龙
- 洛谷 P1019 单词接龙
- 洛谷——P1019 单词接龙(NOIP2000 T3)
- 洛谷 P1019 [NOIP2000 T3] 单词接龙
- 洛谷 P1019 单词接龙
- 【搜索】单词接龙 luogu-1019
- 单词接龙(dragon)(BFS)
- Arithmetic problem | 单词接龙 II