- 单词接龙
题目的大致思路与程序实现框架
- 2025-1-19 15:47:34 @
#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
- 上传者