P1019 单词接龙【洛谷】

P1019 单词接龙

#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int n,ans,used[maxn];
string word[maxn],beginn;
bool check(string s,string m,int k)
{
	int lens=s.length();
	for(int i=0;i<k;i++)
		if(s[lens-k+i]!=m[i])
			return false;
	return true;
}
void add(string &s,string m,int k)
{
	int lenm=m.length();
	for(int i=k;i<lenm;i++)
		s+=m[i];
}
void dfs(string now)
{
	int x=now.length();
	ans=max(ans,x);
	for(int i=1;i<=n;i++)
	{
		if(used[i]>=2)	continue;
		int len=word[i].length();
		for(int j=1;j<=len;j++)
			if(check(now,word[i],j))
			{
				string temp=now;
				add(temp,word[i],j);
				if(temp==now)	continue;
				used[i]++;
				dfs(temp);
				used[i]--;
				break;
			}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)	cin>>word[i];
	cin>>beginn;
	dfs(beginn);
	cout<<ans;
}
发布了180 篇原创文章 · 获赞 22 · 访问量 9011

猜你喜欢

转载自blog.csdn.net/qq_44622401/article/details/104290562