比赛 |
练习赛 |
评测结果 |
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;
}