接龙数列问题

更好的阅读体验请点击 接龙数组。

题目:接龙

对于一个长度为 K 的整数数列:A1,A2,…,AK,我们称之为接龙数列当且仅当 Ai 的首位数字恰好等于 Ai−1的末位数字 (2≤i≤K)。

例如 12,23,35,56,61,1112,23,35,56,61,11 是接龙数列;12,23,34,5612,23,34,56 不是接龙数列,因为 5656 的首位数字不等于 3434 的末位数字。

所有长度为 11 的整数数列都是接龙数列。

现在给定一个长度为 N的数列 A1,A2,…,AN,请你计算最少从中删除多少个数,可以使剩下的序列是接龙序列?

输入格式

第一行包含一个整数 N。

第二行包含 N个整数 A1,A2,…,AN。

输出格式

一个整数代表答案。

数据范围

对于 20%20% 的数据,1≤N≤20
对于 50%50% 的数据,1≤N≤10000
对于 100%100% 的数据,1≤N≤105,1≤Ai≤109。所有 Ai 保证不包含前导 00。

输入样例:
5
11 121 22 12 2023
输出样例:
1
样例解释

删除 2222,剩余 11,121,12,202311,121,12,2023 是接龙数列。

解题思路:

​ 题目要求最少删除多少个数,即求最长的接龙数列长度。

​ 只要前一个数的结尾能和后一个数的开头一样,则可以进行接龙,这一点跟最长上升子序列模型相似:都是前一个数与后一个数存在某一种关系就可以接在一起。

​ DP分析如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 分析到这里,代码就可以写了,代码如下:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 100010;

int n;
int f[N];
int l[N], r[N];

int main()
{
    cin >> n;
    
    char num[20];
    for (int i = 0; i < n; i ++)
    {
        cin >> num;
        l[i] = num[0] - '0', r[i] = num[strlen(num) - 1] - '0';
    }
    
    int res = 0;
    for (int i = 0; i < n; i ++)
    {
        f[i] = 1;
        for (int j = 0; j < i; j ++)
            if (l[i] == r[j]) f[i] = max(f[j] + 1, f[i]);
        res = max(res, f[i]);
    }
    
    cout << n - res << endl;
    
    return 0;
}

​ 如果觉得这题就这么结束了,那就大错特错了。

​ 我们可以观察数据范围:n <= 100010,而我们的算法的时间复杂度是O(n^2)的,故需要进行优化。

​ 我们发现只有当l[i] = r[j]时,我们才需要更新状态,故我们可以用一个辅助数组,存下以k结尾的接龙数列有多少个,在更新时直接用f[i] = max(f[i], g[l[i]])进行更新状态即可,紧接着记得要更新g[r[i]] = max(f[i], g[r[i]])

AC代码
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 100010;

int n;
int f[N], g[N];
int l[N], r[N];

int main()
{
    cin >> n;
    
    char num[20];
    for (int i = 0; i < n; i ++)
    {
        cin >> num;
        l[i] = num[0] - '0', r[i] = num[strlen(num) - 1] - '0';
    }
    
    int res = 0;
    for (int i = 0; i < n; i ++)
    {
        f[i] = 1;
        f[i] = max(f[i], g[l[i]] + 1);	//更新状态
        g[r[i]] = max(f[i], g[r[i]]);	//更新g数组
        res = max(res, f[i]);
    }
    
    cout << n - res << endl;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/228068.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

获取拼多多京东淘宝商品数据店铺数据店铺信息最推荐最好用的一种方式就是API接口

随着越来越多的社会资源被网络化和数字化&#xff0c;大数据可以承载的价值也将不断被提及和提高&#xff0c;大数据的应用范围也将不断扩大。因此&#xff0c;在未来的网络时代&#xff0c;大数据本身不仅可以代表价值&#xff0c;而且大数据本身也可以创造价值。 获取淘宝拼…

STL(一)(pair篇)

1.pair的定义和结构 在c中,pair是一个模板类,用于表示一对值的组合它位于<utility>头文件中 pair的定义如下: template<class T1, class T2> struct pair{T1 first; //第一个值T2 second; //第二个值//构造函数pair();pair(const T1&x,const T2&y);//比较…

理解自我效能感:你的内在动力来源

1. 自我效能感&#xff1a;开启个人潜能的心理动力 想象一下&#xff0c;面对生活的挑战和机遇时&#xff0c;是什么内在力量驱使你去采取行动&#xff0c;或者让你犹豫不决&#xff1f;这种力量&#xff0c;与我们的心理状态紧密相关&#xff0c;其中一个关键因素就是我们的自…

PHP escapeshellarg()+escapeshellcmd()绕过

文章目录 函数利用escapeshellarg()函数escapeshellcmd()函数 exp执行原理攻击面例题 [BUUCTF 2018]Online Tool例题 [网鼎杯 2020 朱雀组]Nmap 函数利用 escapeshellarg()函数 单引号 ()&#xff1a;转义为 \。 双引号 (")&#xff1a;转义为 \"。 反斜杠 (\)&…

hbuiler中使用npm安装datav

注&#xff1a;datav边框样式目前使用时&#xff1a;适用于网页&#xff0c;不适用于app 1、先安装node 安装、配置Node路径 2、为Node配置环境变量 3、在hbuilder的设置中填写node的路径 配置 4、打开cmd输入npm install jiaminghi/data-view 安装dataV&#xff0c;&…

RHEL网络服务器

目录 1.时间同步的重要性 2.配置时间服务器 &#xff08;1&#xff09;指定所使用的上层时间服务器。 (2&#xff09;指定允许访问的客户端 (3&#xff09;把local stratum 前的注释符#去掉。 3.配置chrony客户端 &#xff08;1&#xff09;修改pool那行,指定要从哪台时间…

Linux 常用命令汇总

1 linux定时任务 查看定时任务&#xff1a;crontab -l 每晚一点半执行定时任务&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定时任务&#xff1a;crontab -e 2 linux 内核版本查询 cat /etc/r…

Linux下的I2C驱动框架以及代码实现

参考资料&#xff1a; 1、Linux IIC 驱动分析 — 框架分析 - 知乎 (zhihu.com) 2、《Linux驱动开发指南》第十一章 3、《正点原子 I.MX6U嵌入式Linux驱动开发指南 V1.6》 4、《Linux设备驱动开发详解》 代码版本&#xff1a;Linux4.1.15 阅读本文需要先有一定的I2C基础以及Linu…

100. 相同的树(Java)

目录 解法&#xff1a; 官方解法&#xff1a; 方法一&#xff1a;深度优先搜索 复杂度分析 时间复杂度&#xff1a; 空间复杂度&#xff1a; 方法二&#xff1a;广度优先搜索 复杂度分析 时间复杂度&#xff1a; 空间复杂度&#xff1a; 给你两棵二叉树的根节点 p 和…

系列学习前端之第 4 章:一文精通 JavaScript

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料&#xff1a; 链接: 百度网盘 请输入提取码 提取码: 6666 1、JavaScript 格式 一般放在 html 的 <head> 标签中。type&#xff1a;默认值text/javascript可以不写&#xff0c;不写也是这个值。 <script typ…

[idea]idea连接clickhouse23.6.2.18

一、安装驱动 直接在pom.xml加上那个lz4也是必要的不然会报错 <dependency><groupId>com.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.4.2</version></dependency><dependency><group…

UDP实现群聊

代码&#xff1a; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String;public class liaotian extends JFrame{private static final int DEFAULT_PORT8899;private JLabel stateLB…

maven工程的pom.xml文件中增加了依赖,但偶尔没有下载到本地仓库

maven工程pom.xml文件中的个别依赖没有下载到本地maven仓库。以前没有遇到这种情况&#xff0c;今天就遇到了这个问题&#xff0c;把解决过程记录下来。 我在eclipse中编辑maven工程的pom.xml文件&#xff0c;增加对mybatis的依赖&#xff0c;但保存文件后&#xff0c;依赖的j…

Vue 创建虚拟DOM元素的几种方式和实际应用。

目录 创建虚拟DOM元素的方式 创建一个简单的元素&#xff1a; 创建一个带有属性的元素&#xff1a; 创建一个带有子元素的元素&#xff1a; 创建一个带有事件监听器的元素&#xff1a; 创建一个Vue组件 创建一个带Props的组件 创建一个带Slot的组件 实际应用 创建虚…

Uview------使用教程

一、点击一下链接安装&#xff1a; https://ext.dcloud.net.cn/plugin?id1593 如果使用HBuilderX编辑器的可以直接点击第一种方式自动安装即可 二&#xff1a;配置文件 在main.js中写入 记得要写在import Vue from vue下面 import uView from ./uni_modules/uview-ui Vue…

Densely Connected Convolutional Networks(2018.1)

文章目录 Abstract1. Introduction提出问题以前的解决方法我们的方法效果 2. Related Work3. DenseNetsResNets.Dense connectivity.Composite function.Pooling layers.Growth rate.Bottleneck layers.Compression.Implementation Details. 4. Experiments5. DiscussionModel …

星闪的三层架构

在数字化转型的浪潮中&#xff0c;物联网技术正成为连接世界的纽带&#xff0c;将各种智能设备融为一个无缝的整体。而在这个大背景下&#xff0c;星闪崭露头角&#xff0c;将成为连接未来的关键枢纽。本文将介绍星闪系统的三层架构&#xff0c;包括基础应用层、基础服务层和星…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存4. 上传结果5. 小程序开发1&#xff09;查询图片2&#xff09;查询识别结…

集团型企业如何做好组织管理?泛微聚才林来支招

随着业务发展&#xff0c;组织越发庞大复杂&#xff0c;组织内部管理事务也愈加复杂。尤其是集团型企业&#xff0c;人员多、事务多、组织架构股权结构复杂&#xff0c;面临着越来越大的集团组织治理难度。 数字经济大潮中&#xff0c;不少中大型集团选择数字化的方式&#xf…
最新文章