首页 > 编程语言 >第十四届蓝桥杯B组c/c++第五题接龙数列

第十四届蓝桥杯B组c/c++第五题接龙数列

时间:2024-04-04 20:29:36浏览次数:22  
标签:std int c++ 蓝桥 接龙 数组 动态 dp

动态规划   接龙数列

我打眼一看感觉得用栈stack,取出首位和末位全都入栈,每次弹出栈顶,获取此时的栈顶并弹出和下一个栈顶比较。整了老半天发现不行,原来是我脑子瓦特了。虽然没有用栈解决这道问题,但是,栈和队列都是非常重要的只是,不了解的同学们可以去学习一下,下面有传送门。栈与队列知识点(我看着学的栈和队列,很不错)。

相反,它是一道动态规划类的问题。题目要求的是最少的删除个数,那咱们就可以使用动态规划求出最长的接龙数字长度,最后在用数组长度减去最长的接龙数字长度。因此,动态规划就是这道题的重点。然而状态转移方程又是动态规划的重点,因此只要我们写出状态转移方程,这道题就迎刃而解了。

让我们用原题的举例来看一下,

11    121     22    12    2023(数列)

 1 1   1 1    2 2   1 2    2 3     (首位  末位)

我们首先建立一个存放数字末位的数组  dp[10]   (十进制数字结尾只可能是0到9,所以我们开的数组长度为10)。每次比较以末尾为dp数组下标的值与以首位为dp数组下标的值+1,并将更大的值赋给以末尾为dp数组下标的元素。

用a来表示首位,用b来表示末位,既动态转移方程就是:   dp[b]=std::max(dp[b],dp[a]+1);

由此,我们再写代码:

#include<iostream>
#include<cstring>
#include<cmath>
#define int long long 
#define endl "\n"
#define ios std::ios::sync_with_stdio(0),std::cin.tie(0),std::cout.tie(0)
int n,dp[10];
void solve()
{
	std::cin>>n;
  int ans=0;
  for(int i=0;i<n;i++)
  {
    std::string s;std::cin>>s;
    int a=s[0],b=s[s.size()-1];
    dp[b]=std::max(dp[b],dp[a]+1);
    ans=std::max(dp[b],ans);
  }
  std::cout<<n-ans<<endl;
}
signed main()
{
	ios;
	solve();
	return 0;
}

动态规划就是这样,想的多,但是写的话只有很少一部分。同时,动态规划类问题没有啥捷径,唯一的捷径就是做题做题再做题

最后,希望可以帮到大家。

标签:std,int,c++,蓝桥,接龙,数组,动态,dp
From: https://blog.csdn.net/2401_83357065/article/details/137292635

相关文章

  • C++内存管理
    前言:本篇将介绍c/c++的内存空间结构与c++中对内存进行管理的用法,包括new,delete,operatornew与operatordelete,定位new以及与c中malloc和free的区别等,到stl容器的底层实现篇将会对内存操作进行模拟实现,会进一步加深对内存管理的理解。目录前言:1.new与delete操作符2.c/c++......
  • C++ 实验 03
    实验3.1设计一个用来表示直角坐标系的Location类,有两个double型私有数据成员x,y;主程序中,输入相应的值,创建类Location的两个对象a和b,分别采用成员函数和友元函数计算给定两个坐标点之间的距离。【提示】类Location的参考框架如下:classLocation{public:       Loc......
  • 蓝桥杯算法题:开心
    https://www.lanqiao.cn/problems/3824/learningeg:n=1234,k=2可以简单的列出这些选项:●1+2+34●1+23+4●12+3+4利用DFS和回溯的思想,程序推导如下:将n分成左右两部分,l表示left左侧的值,r表示right右侧的值。先将l加入res,再将r作为新的n......
  • 【c++初阶】类与对象(下)
    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨......
  • 蓝桥杯填九宫幻方
    通过回溯算法对未输入得数字进行全排列后,依次填入格子,判断是否符合条件。可以更改幻方的大小,来填充任意幻方#include<stdio.h>#include<stdlib.h>#include<stdbool.h>intboard[3][3];//保存输入的幻方intans[3][3][3];//填充后符合条件的幻方inttmp[3][3];//幻方......
  • Qt C++ | Qt 元对象系统、信号和槽及事件(第一集)
    01元对象系统一、元对象系统基本概念1、Qt的元对象系统提供的功能有:对象间通信的信号和槽机制、运行时类型信息和动态属性系统等。2、元对象系统是Qt对原有的C++进行的一些扩展,主要是为实现信号和槽机制而引入的,信号和槽机制是Qt的核心特征。3、要使用元对象系统......
  • 《C++程序设计》阅读笔记【2-程序结构】
    ......
  • 蓝桥杯——翻硬币
    题目小明正在玩一个"翻硬币"的游戏。桌上放着排成一排的若干硬币。我们用*表示正面,用o表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo;如果同时翻转左边的两个硬币,则变为:oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态每次只能同时翻转......
  • 2024SMU蓝桥训练1补题
    B-航班时间思路:地理知识--时差计算-东加西减。此处去程和返程方向相反,时差相加必然抵消。那么就可以知道实际飞行时间ps:这题有点奇怪,本地跑不过样例,交上去是AC。本地跑过样例,交上去RE,WA。RE好像是因为输入的格式不够严格..D-飞机降落思路:全排列枚举ordfs--dfs类似之前电科......
  • C++系列_02 C++程序基本结构
    C++程序的基本结构主要有三点:头文件命名空间主函数一、头文件        第一行代码“#include<iostream>”是编写主函数前必须输入的一行代码,因为他在C++程序开头,所以称为“头文件”。它是一条编译预处理命令。    iostream用于支持输入和输出操作。C++中还......