P1859 单词接龙

复制代码
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n,length=0,vis[1000]={0};string str[1000];
inline int check(string a,string b)
{
    int p=min(a.length(),b.length());
    for(int i=1;a.length()==1? i<=p:i<p;i++)
    {
       bool flag=true;
       for(int j=0;j<i;j++)
       {
          if(a[a.length()-i+j]!=b[j])
          {
              flag=false;
              break;
          }
       }
       if(flag==true) 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;
        else
        {
            int add=check(s,str[i]);
            if(add!=0)
            {
                vis[i]++;
                dfs(str[i],length_now+str[i].length()-add);
                vis[i]--;
            }
        }
    }

}
int main()
{
     cin>>n;
    for(int i=1;i<=n;i++)
     cin>>str[i];
     cin>>str[n+1];
     dfs(str[n+1],1);
     cout<<length<<endl;
     return 0;
}
复制代码

 

posted @   刘海烽  阅读(234)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示