洛谷 P1019 [NOIP2000 提高组] 单词接龙

news/2024/7/20 22:22:24 标签: 深度优先, 算法

 

参考代码 

#include <bits/stdc++.h>
using namespace std;
string s[25];
int vis[25], ans, now = 1, n;
void dfs(int k)
{
    ans = max(ans, now);
    for(int i = 1; i <= n; i++)
    if(vis[i] < 2)
    {
        for(int j = 0; j < s[k].length(); j++)
        if(s[i][0] == s[k][j])
        {
            int cnt1 = j, cnt2 = 0;
            while(s[i][cnt2]==s[k][cnt1]&&cnt1<s[k].length())cnt1++,cnt2++;
            if(cnt1 >= s[k].length())
            {
                vis[i]++;
                now += s[i].length() - cnt2;
                dfs(i); vis[i]--;
                now -= s[i].length() - cnt2;
            }
 
        }
    }
}
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    cin >> s[i]; cin >> s[0];
    dfs(0); cout << ans << endl;
}

思路:首先要知道两个单词合并时,合并部分取的是最小重叠部分

相邻的两部分不能存在包含关系就是说如果存在包含关系,就不能标记为使用过,每个单词最多出现两次

搜索的时候开个vis标记数组,用来标记每个单词使用的次数,从开头字母开始搜索,两层for,第一层for搜索每一个单词

第二层for是判断我们搜索的单词的第几位和枚举的单词的首字母相同

比如搜索的单词是touch,当遍历到cheat这个单词时发现touch的第四位和枚举的单词cheat相同时

我们用while循环找出重叠部分长度

那么当前的长度就是 = 当前长度 + 枚举单词长度 - 重叠部分的长度

回溯的时候vis标记减一,恢复长度就好了。注意初始化now为1,因为开头是单个字母。


http://www.niftyadmin.cn/n/5381856.html

相关文章

5G网络eMBB、uRLLC、mMTC

ITU&#xff08;国际电信联盟&#xff09;于2015年9月正式定义了5G的三大应用场景&#xff1a;eMBB&#xff08;增强型移动宽带&#xff09;、uRLLC&#xff08;低时延高可靠通信&#xff09;、mMTC&#xff08;海量物联网通信&#xff09;。 eMBB是4G MBB&#xff08;移动宽带…

批量上货必备:无需授权,支持跨平台复制爆款同款上架

​对很多淘宝卖家来说&#xff0c;尤其是做一件代发的卖家&#xff0c;每次上新都会选择批量化操作工具来快速铺货。 然而现在淘宝已经封闭了服务商的API接口&#xff0c;市面上的商品采集工具基本上都用不了&#xff0c;而且非常容易被淘宝判定违规。 虽然官方提供了对应的上…

Spring Boot 笔记 023 注册页面

1.1 request.js请求工具 //定制请求的实例//导入axios npm install axios import axios from axios; //定义一个变量,记录公共的前缀 , baseURL const baseURL /api; const instance axios.create({baseURL})//添加响应拦截器 instance.interceptors.response.use(result…

HTTPS网络通信协议基础

目录 前言&#xff1a; 1.HTTPS协议理论 1.1协议概念 1.2加密 2.两类加密 2.1对称加密 2.2非对称加密 3.引入“证书” 3.1证书概念 3.2数据证书内容 3.3数据签名 4.总结 前言&#xff1a; 了解完HTTP协议后&#xff0c;HTTPS协议是HTTP协议的升级加强版&#xff0c…

2024年最新腾讯云轻量4核8G12M服务器CPU内存性价比如何?

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

PDF合并工具

简单的PDF合并工具 简述 为了帮助同事做报销&#xff0c;就临时用 Python 使用 PDF 库打包了一个PDF文件合并工具&#xff0c;这个虽然对于很多程序员来说都是很简单的事情&#xff0c;但是对于一些不是很了解计算机技术的人确实是一个很尴尬的功能。 很多 PDF 编辑软件的这个…

03 SS之返回JSON+UserDetail接口+基于数据库实现RBAC

1. 返回JSON 为什么要返回JSON 前后端分离成为企业应用开发中的主流&#xff0c;前后端分离通过json进行交互&#xff0c;登录成功和失败后不用页面跳转&#xff0c;而是给前端返回一段JSON提示, 前端根据JSON提示构建页面. 需求: 对于登录的各种状态 , 给前端返回JSON数据 …

C语言:查找回文数

题目描述 回文数是一种特殊的数&#xff0c;从左边读和从右边读是一样的&#xff0c;比如123321就是一个回文数。现在给定一个正整数n&#xff08;n≤54&#xff09;&#xff0c;编程求出一个回文数&#xff0c;要求该回文数的各位数字之和等于n&#xff0c;且该回文数大于100…