【00NOIP提高组】单词接龙

#include<bits/stdc++.h>
using namespace std;
const int N=25;
int n,length;
int vis[N];
string str[N];
inline int check(string x,string y)
{
    int len=min(x.size(),y.size());
    for(int i=1;(x.size()==1)?(i<=len):(i<len);i++)
    {
        bool flag=true;
        for(int j=0;j<i;j++)
        {
            if(x[x.size()+j-i]!=y[j])
            {
                flag=false;
            break;
            }
        }
        if(flag) return i;
    }
    return 0; 
}
void dfs(string s,int length_now)
{
    length=max(length,length_now);
    for(int i=1;i<=n;i++)
    {
        if(vis[i]>1) continue;
        int add=check(s,str[i]);
        if(add)
        {
            vis[i]++;
            dfs(str[i],length_now+str[i].size()-add);
            vis[i]--;
        }
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) cin>>str[i];
    cin>>str[n+1];
    dfs(str[n+1],1);
    printf("%d",length);
    return 0;
}

 

posted @ 2019-10-22 12:46  Gold_stein  阅读(586)  评论(0编辑  收藏  举报