接龙序列(14届)

news/2025/2/23 23:04:42

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

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

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

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

输入格式

第一行包含一个整数 N。

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

输出格式

一个整数代表答案。

数据范围

对于 20%20% 的数据,1≤N≤20
对于 50%50% 的数据,1≤N≤10000
对于 100%100% 的数据,1≤N≤10^5 1≤Ai≤10^9。所有 Ai 保证不包含前导 0。

输入样例:

5
11 121 22 12 2023

输出样例:

1

样例解释

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

 

#include<iostream>
using namespace std;
const int N=1e5+10;
int f[N];//以i结尾的最长接龙序列(跟最长上升子序列一个思路)
int l[N],r[N];//l[N]存储一个数的首位数字 r[N]存储一个数字的末位数字
int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)
    {
        string s;cin>>s;
        l[i]=s[0]-'0';
        r[i]=s[s.size()-1]-'0';
    }
    int res=0;
    //(最长上升子序列的思路 但是N=1e5 会超时)
    for(int i=1;i<=n;i++)
    {
        f[i]=1;
        for(int j=1;j<i;j++)
        {
            if(r[j]==l[i]) f[i]=max(f[i],f[j]+1);
        }
        res=max(f[i],res);
    }
    cout<<n-res<<endl;
    return 0;
}

 优化版

 

#include<iostream>
using namespace std;
const int N=1e5+10;
int f[N];//以i结尾的最长接龙序列(跟最长上升子序列一个思路)
int l[N],r[N];//l[N]存储一个数的首位数字 r[N]存储一个数字的末位数字
int g[10];//用来存储第i数字之前 以末尾数字k(0<=k<=9)为结尾的接龙序列的max
          //即g[k]表示在第i个数字以前,为k为末尾的接龙序列的最大长度
int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)
    {
        string s;cin>>s;
        l[i]=s[0]-'0';
        r[i]=s[s.size()-1]-'0';
    }
    int res=0;
    //(最长上升子序列的思路 但是N=1e5 会超时)
    for(int i=1;i<=n;i++)
    {
        f[i]=1;
        //由于第i个数字的首位为l[i],那么只关心前i个数字之前以l[i]结尾的最长接龙序序列就好
        f[i]=max(f[i],g[l[i]]+1);
        //更新 由于第i个数字的末尾为r[i],那么就要更新g[r[i]]
        g[r[i]]=max(f[i],g[r[i]]);
        res=max(f[i],res);
    }
    cout<<n-res<<endl;
    return 0;
}


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

相关文章

网络安全 Day27-运维安全项目-堡垒机部署

运维安全项目-堡垒机部署 1. 运维安全项目-架构概述2. 运维安全项目之堡垒机2.1 堡垒机概述2.2 堡垒机选型2.3 环境准备2.4 部署Teleport堡垒机2.4.1 下载与部署2.4.2 启动2.4.3 浏览器访问teleport2.4.4 进行配置2.4.5 安装teleport客户端 2.5 teleport连接服务器 1. 运维安全…

spring AOP两种动态代理

本文开始 1.什么是动态代理&#xff1f; 动态代理&#xff1a;本来是通过直接访问目标对象的&#xff0c;但是找个代理对象替你进行访问目标对象&#xff0c;这就是动态代理过程&#xff1b; 例如&#xff1a;买饭作为目标对象&#xff0c;自己不想亲自跑腿&#xff0c;就点个…

2208. 将数组和减半的最少操作次数

2208. 将数组和减半的最少操作次数 给你一个正整数数组 nums 。每一次操作中&#xff0c;你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。&#xff08;注意&#xff0c;在后续操作中你可以对减半过的数继续执行操作&#xff09; 请你返回将 nums 数组和 至少 减少一…

软件测试工程师面试如何描述自动化测试是怎么实现的?

软件测试工程师面试的时候&#xff0c;但凡简历中有透露一点点自己会自动化测试的技能点的描述&#xff0c;都会被面试官问&#xff0c;那你结合你的测试项目说说自动化测试是怎么实现的&#xff1f;一到这里&#xff0c;很多网友&#xff0c;包括我的学生&#xff0c;也都一脸…

使用威胁建模进行DevSecOps实践丨IDCF

作者&#xff1a; 姚圣伟&#xff08;现就职天津引元科技 天津市区块链技术创新中心&#xff09; 研发效能&#xff08;DevOps&#xff09;工程师认证学员 一、从DevOps到 DevSecOps DevOps 最开始最要是强调开发和运维的协作与配合&#xff0c;至今&#xff0c;已不仅仅涉…

IL汇编 ldarg 指令学习

IL汇编代码&#xff0c; .assembly extern mscorlib {} .assembly MathLib {.ver 1 : 0 : 1 : 0 }.module MathLib.dll.namespace MyMath { .class public ansi auto MathClass extends [mscorlib]System.Object{ .method public int32 GetSquare(int32) c…

在矩池云安装使用 PaddleHub 和 PaddlePaddle

在安装 PaddleHub 导入的时候我们常常会遇到各种错误&#xff0c;不是这个包没这个模块&#xff0c;就是哪个包没这个属性&#xff0c;每次遇到都会很头痛&#xff0c;网上也没有 PaddleHub 和 PaddlePaddle 对应的版本&#xff0c;只能自己慢慢尝试&#xff0c;通过不断查错误…

leetcode904. 水果成篮(java)

水果成篮 leetcode904. 水果成篮题目描述滑动窗口代码演示 回溯算法 leetcode904. 水果成篮 难度 - 中等 leetcode 904 水果成蓝 题目描述 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树…