蓝桥杯2023接龙数列(洛谷P9242)题解:动态规划与数字首尾匹配的完美应用

贾蔷
• 阅读 17

蓝桥杯2023接龙数列(洛谷P9242)题解:动态规划与数字首尾匹配的完美应用

一、题目解读

这道蓝桥杯省赛真题要求找出数字序列中最长的接龙子序列(每个数字的首位等于前一个数字的末位),并计算需要删除的最少数字个数。题目考察动态规划的实际应用能力,是理解数字特征处理和状态转移的典型案例。

二、解题步骤

1.处理n=1的特殊边界情况

2.读取输入数字序列

3.初始化dp数组(大小为10,对应0-9的数字)

4.遍历数字序列:

获取当前数字的首位和末位

更新dp[末位]的值

5.找出dp数组中的最大值

6.计算并输出需要删除的数字个数

三、代码实现(带注释)

#include<iostream>
#include<string>
#include<vector>
using namespace std;

// 获取数字首位
int head(int n){
    return (to_string(n))[0]-'0';
}

// 获取数字末位
int tail(int n){
    return n%10;
}

// 核心计算函数
int aaa(int a[],int n){
    int dp[10]={0};  // dp数组,索引表示数字末位
    int ret=0;
    for(int i=0;i<n;i++){
        dp[tail(a[i])]=max(dp[tail(a[i])],dp[head(a[i])]+1);
    }
    for(int i=0;i<10;i++){
        ret=max(dp[i],ret);  // 找出最长序列
    }
    return n-ret;  // 计算需要删除的数字个数
}

int main(){
    int n;
    cin>>n;
    if(n==1){  // 特殊情况处理
        cout<<0;
        return 0;
    }
    int a[100005];
    for(int i=0;i<n;i++){
        cin>>a[i];  // 读取输入
    }
    cout<<aaa(a,n);
    return 0;
}

原文:蓝桥杯2023接龙数列(洛谷P9242)题解:动态规划与数字首尾匹配的完美应用 算法竞赛必备技巧

点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
4年前
用Python编程语言来实现阿姆斯特朗数的检查
一、什么是阿姆斯特朗数?如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。一个正整数称为阿姆斯特朗阶数。例:abcd...anbncndn...如果是3位的阿姆斯特朗数字,则每个数字的立方和等于该数字本身。例如:153111555333//153是一个阿姆斯特朗
桃浪十七丶 桃浪十七丶
4年前
输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。
题目内容:输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。例:(1)输入:Ilovehebeu!输出:character:10,space:2,digit:0,others:1(2)输入:2020,haveabrilliantyear!输出:character:18,space:4,digit:4,others:2答案:c
Karen110 Karen110
3年前
用Python编程语言来实现阿姆斯特朗数的检查
一、什么是阿姆斯特朗数?如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。一个正整数称为阿姆斯特朗阶数。例:abcd...anbncndn...如果是3位的阿姆斯特朗数字,则每个数字的立方和等于该数字本身。例如:153111555333//153是一个阿姆斯特朗数。二、案
Stella981 Stella981
3年前
LeetCode 第225场周赛题解
【GiantPandaCV导语】这是LeetCode的第225场周赛的题解,本期考察的知识点有暴力,前缀和,推导等等。比赛链接https://leetcodecn.com/contest/weeklycontest225/题目一:替换隐藏数字得到的最晚时间!(h
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
P1162 填涂颜色
题目描述由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6×6的方阵(n6),涂色前和涂色后的方阵如下:00000000111101100
Stella981 Stella981
3年前
JavaScript基础知识
题目:1.找出数字数组中最大的元素(使用Math.max函数)2.转化一个数字数组为function数组(每个function都弹出相应的数字)3.给object数组进行排序(排序条件是每个元素对象的属性个数)4.利用JavaScript打印出Fibonacci数(不使用全局变量)5.实现如下语法的功能:vara(5).plus(
Wesley13 Wesley13
3年前
MySQL清空表漏洞!
MySQL有一个特点,当某个字段是字符串时,如果你的sql传数字它会尝试把这一列所有值转换成数字进行匹配,如果不是数字则会转换为0.创建表test,并插入测试数据CREATETABLEtest(idvarchar(10)NOTNULL,PRIMARYKEY(id));
贾蔷 贾蔷
1星期前
力扣1137题 解题思路和步骤 C++代码实现,力扣一共多少题
一、题目分析力扣1137题要求我们找到第N个泰波那契数。泰波那契数的定义是:T00,T11,T21,且在n0的条件下Tn3TnTn1Tn2。,当n4时,T4T3T2T14。这道题主要考查我们对递归或动态规划的理解和运用。在思考解题方法时,我们
贾蔷 贾蔷
1天前
2025年GESP七级等价消除(洛谷P11965)代码解析与优化策略
一、题目解读2025年GESP七级考试中的“等价消除(洛谷P11965)”问题要求统计给定字符串中满足等价条件的子串数量。所谓“等价子串”,是指子串中所有字符出现的次数均相同。题目需要高效算法解决,考验对字符串处理和状态压缩的掌握。二、解题思路采用位运算