51分求助
查看原帖
51分求助
941801
louie2011楼主2024/8/10 14:31
#include<bits/stdc++.h>
using namespace std;
string str[25];
int used[25];
int n,ans;
int valid(string a,string b)
{
	int len1=a.length(),len2=b.length();
	for(int i=1;i<=min(len1,len2)-1;i++)
	{
		int good=1;
		for(int j=1;j<=i;j++)
		if(a[len1-1-i+j]!=b[j-1])
		{
			good=0;
			break;
		}
		if(good)
		{
			return len1+len2-i;
		}
	}
	return -1;
}
void dfs(int len,string last)
{
	bool good=0;
	for(int i=1;i<=n;i++)
	{
		if(used[i]<2)
		{
			int tmp=valid(last,str[i]);
			if(tmp!=-1)
			{
				used[i]++;
				dfs(len+tmp-last.length(),str[i]);
				good=1;
				used[i]--;
			}
		}
	}
	if(!good)
	{
		ans=max(len,ans);
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>str[i];
	}
	char st;
	cin>>st;
	for(int i=1;i<=n;i++)
	{
		if(str[i][0]==st)
		{
			dfs(str[i].length(),str[i]);
		}
	}
	cout<<ans<<endl;
	return 0;
}

前3个点wa

2024/8/10 14:31
加载中...