#include<iostream>
#include<cstdio>
using namespace std;
//定义一些用到的变量
string words[N];
int vis[N];
// check(k, j) 返回当前龙最后单词是第k个,和第j个单词之间的首尾最小重叠长度,是0的话表示不重叠
int check(int k, int j) 
{
    int len = 0;
    //暴力枚举第k个单词的尾 和 第j个单词的头
    //可以枚举重叠长度(二层for)
    
    return len;
}
void dfs(int k, int len)
{
    ans = max(ans, len); // 更新答案
    //枚举每一个单词
    for(int i = 1; i <= n; i++)
    {
        if(vis[i] >= 2) continue;  // 用完了
        int L = check(k, i);
        if(L)
        {
            vis[i]++;
            dfs(i, len + strlen(words[i]) - L);
            vis[i]--; //  回溯
        }
    }
}
int main(void)
{
    //输入
    //枚举每一个字母c开头的单词作为龙的开始
    for(int i = 1; i <= n; i++)
    {
        if(words[i][0] == c)
        {
            dfs(i, strlen(words[i]));
        }
    }
    // 输出
    cout << ans << endl;
    return 0;
}

0 条评论

目前还没有评论...

信息

ID
2204
时间
1000ms
内存
256MiB
难度
8
标签
递交数
181
已通过
34
上传者