ad1 广告
 
收藏文章 楼主

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

版块:文章资讯   类型:普通   作者:某个人   查看:15   回复:0   获赞:0   时间:2025-06-06 18:50:56

蓝桥杯2023接龙数列(洛谷P9242)题解:动态规划与数字首尾匹配的完美应用 算法竞赛必备技巧 蓝桥杯接龙数列 动态规划题解 数字序列处理 算法竞赛真题 最长子序列问题 洛谷P9242 第1张


一、题目解读

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

二、解题步骤

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

  2. 2.读取输入数字序列

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

  4. 4.遍历数字序列:

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

    • 更新dp[末位]的值

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

  6. 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)题解:动态规划与数字首尾匹配的完美应用 算法竞赛必备技巧


 
ad1 广告位8,870 x auto
回复列表
默认   热门   正序   倒序

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

Powered by 免费外链论坛

©2015 - 2025 免费外链论坛

免费外链论坛 免费发布外链 发外链平台Sitemap

您的IP:216.73.216.80,2025-06-16 23:52:44,Processed in 0.02979 second(s).

备案信息:浙ICP备2024090696号

声明:本站内容为用户自主发布,不对其内容真实性负责,虽然本站会一一审核,但能力有限,如您发现违规内容,请及时联系管理员。

主页

欢迎您的浏览

QQ联系图标

自助查询

99%的问题都能找到答案

联系站长

工作时间:9:00~17:30

微信二维码

回到顶部

向上滚动到顶部

个人中心

去个人首页看看吧

转到底部

向下滚动到底部

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息