首页 > 其他分享 >蓝桥杯备赛笔记(九)动态规划(一)

蓝桥杯备赛笔记(九)动态规划(一)

时间:2025-01-19 21:03:51浏览次数:3  
标签:状态 LCS 杯备赛 笔记 蓝桥 dp 序列 最长 DP

1.动态规划基础

(1)线性DP

1)什么是DP(动态规划)

DP(动态规划)全称Dynamic Programming,是运筹学的一个分支,是一种将复杂问题分解成很多重叠的子问题,并通过子问题的解得到整个问题的解的算法。

在动态规划中有一些概念:

状态:就是形如dp[i] [j] = val的取值,其中i,j为下标,也是用于描述、确定状态所需的变量,val为状态值。

状态转移:状态与状态之间的转移关系,一般可以表示为一个数学表达式,转移方向决定了迭代或递归方向。

最终状态:也就是题目所求的状态,最后的答案。

2)动态规划的分析步骤

①确定状态,一般为“到第i个为止,xx为j(xx为k)的方案数/最小代价/最大价值”,可以根据数据范围和复杂度来推理。

②确定状态转移方程,即从已知状态得到新状态的方法,并确保按照这个方向一定可以正确地得到最终状态。根据状态转移的方向来决定使用迭代法还是递归法、记忆化。

③确定最终状态并输出。

(2)二维DP

二维DP就是指DP数组的维度为二维的DP(当然有时候可能会三维四维,或者存在一些优化使得它降维成一维),广义的来讲就是有多个维度的DP,即用于描述DP状态的变量不止一个。

(3)最长上升子序列LIS

LIS(最长上升子序列)是一个经典的DP模型。

子序列指的是一个序列中,按照原顺序选出若干个不一定连续的元素所组成的序列。在求解LIS时,一般我们会设dp[i]表示1~i序列中以a[i]结尾的最长上升子序列的长度,状态转移方程为:

dp[i] = max(dp[i] + 1), if a[i] > a[j]

表示a[i]要插入到不同子序列后面的情况。

(4)最长公共子序列LCS

LCS(Longest Common Subsequence最长公共子序列)是一个经典的DP模型。

LCS问题是给定两个子序列A和B,求它们的最长公共子序列。

在求解LCS时,一般我们会设dp[i] [j]表示A[1 ~ i]序列和B[1 ~ j]序列中(不规定结尾)的最长公共子序列的长度,状态转移方程为:

if a[i] = b[j] : dp[i] [j] = dp[i -1] [j - 1] + 1

else dp[i] [j] = max(dp[i - 1] [j], dp[i] [j - 1])

当a[i] = b[j]时,可以将他们作为插入到LCS的后面,使得长度变长1,当a[i] != b[j]时,说明此时LCS不会延长,那就要从dp[i - 1] [j]和dp[i] [j - 1]中取大的作为最长的长度。

标签:状态,LCS,杯备赛,笔记,蓝桥,dp,序列,最长,DP
From: https://blog.csdn.net/weixin_71201865/article/details/145247688

相关文章

  • 25/1/14 算法笔记<强化学习> CBR加强化学习
    CBR,基于案例的推理,它是一种基于过去的实际经验或经历的推理,他可以根据过往的案例找到与当前案例最相关的案例,然后对该案例做改动来解决当前的问题。CBR的过程CBR可以看作一个循环过程:相似按键检索-->案例重用-->案例修改-->案例学习遇到新问题时,将新问题通过案例描述输入CB......
  • Java初学者笔记-06、Stream流
    什么是Stream流JDK8开始新增的一套API,可以用于链式操作集合或者数组的数据。优势:Stream流大量的结合了Lambda的语法风格来编程,功能强大,性能高效,代码简洁,可读性好。list.stream().filter(s->s.startswith("张")).filter(s->s.Length()==3).collect(Collectors.toList());......
  • Maui学习笔记-CommunityToolkit.Maui动画案例
    动画元素在CommunityToolkit.Maui工具包中提供了AnimationBehavior和BaseAnimation类。AnimationBehavior作用在视图UI元素,并用作动画的容器。BaseAnimation是实现动画逻辑的基类。下面这个案例是使一个按钮实现淡入淡出的效果在主页的隐藏文件中创建一个类继承Ba......
  • 计算机图形学技术笔记~直线Bresenham算法
    研究内容:(1)基于图形设备的基本图形元素的生成算法,如用光栅图形显示器生成直线、圆弧、二次曲线、封闭边界内的图案填充等。布雷森汉姆直线Bresenham算法:(1)利用距离误差大小比较判断符号;(2)推导递推公式;(3)不必计算直线斜率,不用浮点数;(4)只用整数加减法和乘2运算,乘2运......
  • MySQL数据库笔记——主从复制
    大家好,这里是GoodNote,关注公主号:Goodnote,本文详细介绍MySQL的主从复制,从原理到配置再到同步过程。文章目录简介核心组件主从复制的原理作用主从复制的线程模型主从复制的模式形式复制的方式设计复制机制主从复制的配置步骤优化和改进总结历史文章简介MySQ......
  • 备赛蓝桥杯——day4:C++篇
    第二章:C/C++输入输出(上)1.getchar和putchargetchar()和putchar()是属于C语⾔的库函数,C++是兼容C语⾔的,所以C++中只要正确包含头⽂件也可以正常使⽤这两个函数。1.1getchar函数原型:intgetchar(void);getchar()函数返回用户从键盘输入的一个字符(本质是返回他的asc码值),......
  • 学习笔记:Pytorch基础(一)--张量
    张量(Tensor)是PyTorch中的核心数据结构,用于存储和操作多维数组。相当于NumPy的ndarray(NumPy是python的一种开源的数据计算扩展,支持大量的维度数组和矩阵运算)。但是PyTorch的张量可以运行在不同的设备上,比如CPU和GPU,这使得它们非常适合于进行大规模并行计算,特别是在深度学......
  • icp算法学习笔记
    一、点云我们在做3D视觉的时候,处理的主要是点云,点云就是一些点的集合。相对于图像,点云有其不可替代的优势——深度,也就是说三维点云直接提供了三维空间的数据,而图像则需要通过透视几何来反推三维数据。而实际上点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐......
  • Java初学者笔记-05、集合框架
    集合体系集合是可变长的。Collection:代表单列集合,每个元素包含一个值。Map:代表双列集合,每个元素包含两个值。Collection集合List系列集合:添加的元素是有序、可重复、有索引。ArrayList、LinekdList:有序、可重复、有索引。Set系列集合:添加的元素是无序、不重复、无索......
  • 莫比乌斯函数学习笔记
    \(\text{莫比乌斯函数学习笔记}\)前言注意到我并没有将"莫比乌斯反演"作为文章的题目,主要原因是莫比乌斯反演可以解决的题目用莫比乌斯函数通常便可以解决。莫比乌斯函数的前置知识有且仅有数论分块。数论分块引理1\[\foralla,b,c\in\mathbb{Z},\left\lfloor\frac{a}{bc}......