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;
}
原文地址:https://www.cnblogs.com/Mark-X/p/11739288.html
时间: 2024-10-17 16:05:53