比赛 练习赛 评测结果 AAAAAAAAA
题目名称 单词接龙 最终得分 100
用户昵称 梦那边的美好ET 运行时间 0.005 s
代码语言 C++ 内存使用 13.66 MiB
提交时间 2019-05-22 11:46:50
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int used[25],len[25][25],N,ans=0;
char a[25][50];
void Calc(int x,int y){
	int len1=strlen(a[x]);
	int len2=strlen(a[y]);
	int i=len1-1,j=0;
	while(i>=0){
		if(len1-i>=len2)return;
		if(a[x][i]==a[y][j]){
			bool flag=1;
			for(int k=1;k+i<len1;k++){
				if(a[x][k+i]!=a[y][k]){flag=0;break;}}
			if(flag){len[x][y]=len2-len1+i;return;}}
		i--;}}
void DFS(int n,int now){
	ans=max(now,ans);
	for(int i=1;i<=N;i++){
		if(used[i]<2&&len[n][i]){
			used[i]++;
			DFS(i,now+len[n][i]);
			used[i]--;}}}
int main(){
	freopen("dcjl.in","r",stdin);
	freopen("dcjl.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;i++)scanf("%s",a[i]);
	scanf("%s",a[0]);
	for(int i=0;i<=N;i++)
		for(int j=0;j<=N;j++)
			Calc(i,j);
	DFS(0,0);
	printf("%d",ans+strlen(a[0]));
	return 0;
}