P1019 [NOIP2000 提高组] 单词接龙

 

明显的 dfs

>>>string cnt be >> s+1

>>>dfs  string better

想好再打

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------debug\n");
using namespace std;

int n,us[30],ans;
string str[30];

int link(string st1,string st2)
{
    for(int i=1;i<=min(st1.length(),st2.length());i++)
    {
        int flag=1;
        for(int j=0;j<=i-1;j++){
            if(st1[st1.length()-1-i+1+j]!=st2[j])flag=0;
        }
        if(flag==1&&i==min(st1.length(),st2.length())) return 0;
        if(flag==1) return i; 
    }
    return 0;
}
void dfs(string st,int len)
{
    if(len>ans) ans=len;
    for(int i=0;i<=n-1;i++)
    {
        if(us[i]>=2) continue;
        int t=link(st,str[i]);
        if(t!=0)
        {
            us[i]++;
            dfs(str[i],len+str[i].length()-t);
            us[i]--;
        }
    }
}
int main()
{
    //ios::sync_with_stdio(false); cin.tie(0);
    cin>>n;
    for(int i=0;i<=n;i++) cin>>str[i];
    dfs(' '+str[n],1);
    
    cout<<ans<<'\n';
    
    return 0;
}
View Code

 

 
posted @ 2023-08-01 16:18  JMXZ  阅读(8)  评论(0)    收藏  举报