接龙序列(14届)

这篇具有很好参考价值的文章主要介绍了接龙序列(14届)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于一个长度为 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 是接龙数列。

接龙序列(14届),蓝桥杯,蓝桥杯,dp

 文章来源地址https://www.toymoban.com/news/detail-637613.html

#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;
}

到了这里,关于接龙序列(14届)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动态规划树形DP课后习题蓝桥舞会

      蓝桥舞会 题目描述 蓝桥公司一共有n名员工,编号分别为1~n。 他们之间的关系就像一棵以董事长为根的树,父节点就是子节点的直接上司。每个员工有一个快乐指数aj。 现蓝桥董事会决定举办一场蓝桥舞会来让员工们在工作之余享受美好时光,不过对于每个员工,他们都

    2024年02月21日
    浏览(48)
  • 蓝桥杯第六讲--简单dp【例题】

    蓝桥杯官网:蓝桥杯大赛——全国大学生TMT行业赛事 ✨本博客讲解 蓝桥杯C/C++ 备赛所涉及算法知识,此博客为第六讲:简单dp【例题】 本篇博客所包含习题有: 👊 01背包问题 👊 摘花生 👊 最长上升子序列 简单dp【习题】见博客:蓝桥杯第六讲–简单dp【习题】 博客内容以

    2023年04月25日
    浏览(45)
  • dp专题14 爬楼梯(进阶)

    本题链接:题目页面 输入 输出 3         这是个 完全背包 + 排列数选取方法的dp问题。需要注意的是初始化 0 和 1 都为 1.

    2024年01月18日
    浏览(67)
  • 美丽序列(Dp)

    传送门 牛牛喜欢整数序列,他认为一个序列美丽的定义是 1:每个数都在0到40之间 2:每个数都小于等于之前的数的平均值 具体地说:for each i, 1 = i N,  A[i] = (A[0] + A[1] + ... + A[i-1]) / i. 3:没有三个连续的递减的数 现在给你一个序列,每个元素是-1到40,你可以将序列中的-1修改

    2024年02月13日
    浏览(55)
  • 动态规划dp —— 28.摆动序列

    连续相同的数不算是摆动序列 单独一个或不相等的两个数算是摆动序列  是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:以i位置为结尾的所有子序列中,最长的摆动序列的长度 但是i位置的值可能是下降后的,也可能是上升后的,所以细分为两种状态表示 f[i]表

    2024年02月12日
    浏览(36)
  • 蓝桥杯备赛之动态规划篇——涂色问题(区间DP)

    2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现) 2023第十四届蓝桥杯模拟赛第三期个人题解(Java实现) 蓝桥杯备赛之动态规划篇——背包问题 蓝桥杯真题——单词分析(Java实现) 😘😘 哈喽,大家好!这里是蓝桥杯系列文章的动态规划章节🔥🔥,今天要讲解的是区

    2024年01月23日
    浏览(49)
  • 【重点】【DP】300. 最长递增子序列

    题目 更好的方法是耐心排序,参见《算法小抄》的内容!!! 基础解法必须掌握!!!

    2024年01月17日
    浏览(57)
  • 力扣hot100 最长递增子序列 线性DP 贪心 二分

    Problem: 300. 最长递增子序列 时间复杂度: O ( n 2 ) O(n^2) O ( n 2 ) 空间复杂度: O ( n ) O(n) O ( n ) 👨‍🏫 参考题解 时间复杂度: O ( n log ⁡ n ) O(nlog{n}) O ( n lo g n ) 空间复杂度: O ( n ) O(n) O ( n )

    2024年01月20日
    浏览(41)
  • Android14实战:调整A2DP音量曲线(五十三)

    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏: Audio工程师进阶系列 【 原创干货持续更新中…… 】🚀 优质专栏: 多媒体系统工程师系列 【 原创干货持续更新中…… 】🚀 人生格言: 人生从来没有捷径

    2024年01月23日
    浏览(42)
  • 【LeetCode】1143.最长公共子序列(闫氏dp可视化无分析)

      推荐一下这道题的可视化过程 最长公共子序列 - 动态规划 Lngest Common Subsequence - Dynamic Programming_哔哩哔哩_bilibili  

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包