luogu 题目选做

1025

P1019 单词接龙

往年的\(noip\)原题,纯搜索吧,没啥可讲的,直接暴力枚举,暴力判断就行

没有必要每次都存一个很大的字符串,只要存当前的字符串就行了

每个字符串可以用两次

不能包含关系。。。好像也没啥了吧

#include <bits/stdc++.h>
using namespace std;


const int N = 23;
int n , ans = -1 , v[N] ;
string str[N];

inline int check( string s1 , string s2)
{
    register bool flag;
    for( register int i = 1 ; i < min( s1.size() , s2.size() ) ; i ++ )
    {
        flag = 1;
        for( register int j = 0 ; j < i && flag ; j ++ )
        {
            if( s1[s1.size() - i + j ] != s2[j] ) flag  = 0;
        }
        if( flag ) return i;
    }
    return 0;
}

inline void dfs( string cur , int x )
{
    ans = max( ans , x );
    for( register int i = 1 , k ; i <= n ; i ++ )
    {
        if( v[i] >= 2 ) continue;
        k = check( cur , str[i] );
        if( k )
        {
            v[i] ++;
            dfs( str[i] , x + str[i].size() - k );
            v[i] --;
        }
    }
    return ;
}

int main()
{
    cin >> n;
    for( register int i = 1 ; i <= n + 1 ; i ++ ) cin >> str[i];
    dfs( ' ' + str[ n + 1 ] , 1 );
    cout << ans << endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Mark-X/p/11739288.html