求助,样例没过
查看原帖
求助,样例没过
804794
NPCaaabc楼主2023/6/11 22:19
#include<bits/stdc++.h> 
using namespace std;
int a[21][21],n;
char b;
int ans=0;
string word[114]={};
int vi[114]={};
int check(string begin,string end){
	int lena = begin.length();
	int lenb = end.length();
	for(int i=1;i<lena&&i<lenb;i++){
		for(int j=0;j<i;j++){
			if (begin[lena-i+j] != end[j]) continue;
			if(j==i-1) return lenb-i;
		}
	}
	return -1;
}
void dfs(int len,int begin){
	ans = len > ans?len:ans;
	for(int i=1;i<=n;i++){
		if (vi[i] < 2 && a[begin][i] != -1) {
			vi[i] += 1;
			dfs(len + a[begin][i],i);
			vi[i] -= 1;
		}
	}
	return;
}
int main(){
	memset(a,-1,sizeof(a));
	cin>>n;
	for(int i=1;i<=n;i++) cin>>word[i];
	cin>>b;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=check(word[i],word[j]);
		}
	}
	for(int i=1;i<=n;i++) {
		if (word[i][0]==b) {
			vi[i] += 1;
			dfs(word[i].length(),i);
			vi[i] -= 1;
		}
	}
	cout<<ans;
	return 0;
}
2023/6/11 22:19
加载中...