CSP复赛专题1-模拟
【CSP复赛专题1-模拟】 https://www.bilibili.com/video/BV1HYnczGEAc
视频会从模拟的核心概念切入:先讲“模拟”的本质是用计算机实现题目要求的操作,再拆解“建模”的关键——如何将实际问题(如“找成绩最好的同学”)抽象成计算机可处理的数学模型(如“求数组最大值”),帮大家建立“从问题到代码”的转化思维。
4类常见题型:
- 基本操作模拟:教你如何精准理解题目步骤并转化为代码;
- 简单场景模拟:结合地图、角色移动等场景,讲解规则应用与行为模拟;
- 复杂系统模拟:以乘车购票等案例为例,分析多因素相互作用下的数据结构设计;
- 算法结合模拟:展示模拟与找规律、快速幂等高级算法的结合思路。
实战部分会深度拆解两道经典例题: GESP 202403四级T1《相似字符串》:详细讲解“判断字符串通过删/插/改一个字符是否相似”的解题逻辑,重点突破“长度差判断”“等长字符串差异统计”“长短字符串匹配”等重难点,附带完整代码推导; NOIP 2015提高组T1《神奇的幻方》:针对奇数阶幻方的构造规则,逐句解析“1的初始位置”“K值填写的4条规则”,强调条件判断的易错点,全程演示从初始化到输出的完整实现。
CSP复赛专题2-枚举
【CSP复赛专题2-枚举】 https://www.bilibili.com/video/BV1NWnczEE9Z/?share_source=copy_web
本视频聚焦CSP复赛核心算法——枚举,从基础概念到实战例题,系统讲解枚举算法的核心思路与解题技巧,助力备赛CSP的同学掌握枚举类题目解法。
视频先明确枚举的定义(暴力枚举、穷举,即列举所有可能答案并判断),拆解枚举做题三步骤:建立数学模型(明确枚举要素与可能情况)、减少枚举空间(确定枚举范围,排除不必要枚举内容)、选择合适枚举顺序(从前往后或从后往前);随后分类讲解枚举常见题型,包括基础枚举(数值枚举:遍历区间筛选特定数,如被3整除且各位和为偶数;字符串枚举:遍历字符/字符串集合匹配模式,如以指定字母开头且长度为偶数)、组合枚举(子集枚举:位运算/递归枚举子集筛选符合条件结果,如元素和能被k整除;排列枚举:回溯生成全排列筛选目标排列,如无重复数字且能被指定数整除)、算法结合(枚举+贪心:枚举关键状态后用贪心策略,如任务分配顺序枚举+贪心资源分配;枚举+动态规划:枚举状态后用DP解子问题,如背包容量枚举+DP计算最优解)、场景枚举(生活场景:枚举活动组合求最大兼容活动数,如时间安排;游戏场景:枚举移动方向搜索迷宫路径,如BFS/DFS遍历方向)。
实战部分将结合两道经典例题深入讲解:一是[ABC258B]数字盒子,详解N×N循环网格(上下、左右边缘相连)中,如何枚举8个方向与所有格点起点,移动N-1次生成数字并求最大整数,重点演示边界循环处理与数字拼接逻辑;二是[ABC265C]传送带Belt Conveyor,讲解H×W网格中,从(1,1)出发依据方格字符(U、D、L、R)与边界条件移动的问题,如何通过循环枚举移动过程,用标记数组判断无限循环,最终确定停止位置或输出-1。
CSP复赛专题3-贪心(一)
【CSP复赛专题3-贪心(一)】 https://www.bilibili.com/video/BV1ZuJyzXEAx/?share_source=copy_web
视频核心内容包括:
- 贪心算法本质解析:明确“选择每一阶段局部最优以实现全局最优”的核心逻辑,以及“局部最优解一定能导致全局最优解”这一使用前提,结合“取十张钞票最大化金额”的实例辅助理解;
- 完整解题流程:拆解“分解子问题→确定贪心策略→求子问题最优解→堆叠全局最优解”四步解题法,同时说明数学归纳法、反证法两种证明思路,强调“大胆假设、小心求证”的做题原则;
- 常见题型与策略:梳理基础贪心(区间问题按结束/开始时间排序、分配问题按对象排序、排序问题选最小/最大元素)及贪心与枚举、动态规划、模拟的结合题型,明确各类问题的核心应对策略;
- 经典例题精讲:详细讲解[ABC246C]优惠券(优先给高价商品用券的策略推导、代码实现)与[GESP 202503五级T1]平均分配(按出价差异排序的策略、结构体存储与排序代码),完整呈现从策略分析到代码落地的过程,帮你理解贪心算法在实际编程中的应用细节。
CSP复赛专题4-贪心(二)
【CSP复赛专题4-贪心(二)】 https://www.bilibili.com/video/BV1XzJCz5E4C/?share_source=copy_web
视频首先解析经典例题P1159喷水装置(一):题目设定为长20米、宽2米的草坪,横中心线放置n个不同半径的喷水装置,需找出最少使用的装置个数(保证能湿润草坪)。讲解中将明确关键注意事项——半径小于1的装置直接排除(无法覆盖草坪区域),并详细推导装置覆盖长度的计算逻辑(通过Tri函数计算平方根实现),同时附上完整C++程序,逐段拆解代码的实现思路、排序逻辑及终止条件判断细节。
随后深入课后挑战[USACO13OPEN]照相题:n头奶牛成列排列,需拍摄连续区间的照片以保证每头奶牛至少入镜,且k对关系不好的奶牛不能出现在同一张照片中。视频会点明题目本质是“区间选点问题”(每对冲突奶牛对应的区间内至少需选一个断点),核心贪心策略为“按区间右端点升序排序,选择未被覆盖区间的右端点作为断点”,以此实现最少照片数量。同时会讲解该题的完整C++代码,清晰呈现区间处理、排序规则及断点选择的代码落地过程。
CSP复赛专题5-前缀和与差分(一) 【CSP复赛专题5-前缀和与差分(一)】 https://www.bilibili.com/video/BV1vdJyzHEbx/?share_source=copy_web
视频首先讲解前缀和:从定义出发,明确前缀和数组s[i]是原数组a[]前i项元素的累加和,满足公式s[i] = s[i-1] + a[i](即s[i] = Σₖ₌₁ⁱ a[k]);重点说明其核心价值——将原数组区间[l,r]的求和操作,从暴力遍历的O(n²)时间复杂度,优化为通过s[r] - s[l-1]计算的O(1)(预处理前缀和数组为O(n)),并结合具体数组示例(如a=[5,8,12,6],前缀和S=[5,13,25,31]),演示区间[2,3]求和(8+12=20)如何通过S[3]-S[1]=25-5快速得出。
接着深入差分:阐述差分数组b[]的定义——b[i] = a[i] - a[i-1],并强调两个关键关联:差分数组的前缀和等于原数组,前缀和数组的差分数组也等于原数组;核心讲解差分在“区间修改”场景的高效应用:若需对原数组a[]的[l,r]区间所有元素加x,无需遍历区间修改,只需在差分数组中执行b[l] += x、b[r+1] -= x,后续对差分数组求前缀和即可得到修改后的原数组,结合实例(如a数组区间[2,3]加3后差分数组的变化)直观呈现该过程。
实战部分包含两道典型题目:一是“USACO18DEC水桶清单”,分析问题本质为“区间修改+区间查询最大值”,先展示O(n²)的双重循环解法,再对比讲解O(n)的差分优化解法,清晰呈现差分在降低时间复杂度上的优势;二是“增减序列”课后挑战,说明问题要求(通过区间加减一使数列所有元素相同,求最少操作次数与不同结果数量),讲解差分解题思路:目标是让差分数组从第2项起全为0,计算差分数组第2至n项中正数和p、负数和的绝对值q,最少操作次数为max(p,q),不同结果数量为abs(p-q)+1,并结合具体数组示例推导过程。
CSP复赛专题6-前缀和与差分(二)
【CSP复赛专题6-前缀和与差分(二)】 https://www.bilibili.com/video/BV1qKJ9z2Erz/?share_source=copy_web
本视频为CSP复赛专题系列第六讲的第二部分,聚焦前缀和与差分的二维拓展应用,适合CSP复赛备赛选手、学习C++算法的同学巩固二维前缀和与差分知识点,掌握相关题型的解题思路与代码实现。
视频中首先详细讲解二维前缀和的核心知识:包括二维前缀和的定义(以(x,y)为右下角、(1,1)为左上角的矩形元素和)、构建公式(S[i][j] = S[i-1][j] + S[i][j-1] - S[i-1][j-1] + a[i][j]),以及任意子矩阵元素和的计算方法(子矩阵和 = S[x2][y2] - S[x1-1][y2] - S[x2][y1-1] + S[x1-1][y1-1]);同时结合“最大子矩阵”实例(4x4矩阵输入与15的输出结果),完整演示枚举所有可能子矩阵、求解最大元素和的过程与代码。
随后聚焦二维差分的应用,以“地毯覆盖”问题(n x n格子、m个地毯,统计每个格子被覆盖次数)为切入点,解析二维差分矩阵的构建逻辑——通过修改差分矩阵四个角落元素实现区域更新(复杂度O(1)),以及通过二维前缀和从差分矩阵恢复原矩阵的方法,并展示完整代码。
最后针对“激光炸弹”实战题目展开讲解,涵盖问题转化(将目标点坐标转为格子坐标)、数据范围处理(R取min(5001, R))、利用二维前缀和求解R×R正方形内最大目标总价值的思路与代码,帮助观众将知识点落地到实际解题中。
CSP复赛专题7-二分(一)
【CSP复赛专题7-二分(一)】 https://www.bilibili.com/video/BV1sAn3zkEe3/?share_source=copy_web
视频开篇会先明确二分查找的核心逻辑——基于分治策略,利用数据有序性每轮缩小一半搜索范围,并通过对比顺序查找与二分查找的最多查询次数、时间复杂度,直观展现二分查找在处理大规模数据(如1亿元素数组)时的效率优势(仅需27次查询,时间复杂度O(log n))。接着结合[0,9]区间查找数字6的图解案例,清晰拆解二分查找的执行步骤,让大家理解每一步区间调整的原理。
在代码模板部分,会详细讲解两种常用区间模型的实现:左闭右闭区间[0,n-1]与左闭右开区间[0,n],分析不同区间下while循环条件、mid计算及l/r调整的差异;同时给出两种关键场景的专用模板——左侧[1,mid]找最小满足条件值的bsearch_1函数、右侧[mid,r]找最大满足条件值的bsearch_2函数,还会特别说明bsearch_2中mid计算加1的原因,避免死循环问题。
实战环节将通过三道经典例题深化应用:一是“查找最接近的元素”,处理非降序列中多个查询值的匹配问题,涵盖特例判断(查询值小于等于最小值、大于等于最大值)与二分搜索后相近元素的比较逻辑;二是“数的范围”,讲解如何用二分查找确定升序数组中目标元素的起始与终止位置,还会引入STL中的binary_search、lower_bound、upper_bound函数,对比手动实现与STL函数的使用场景及效率;三是“数的三次方根”,拓展二分查找在浮点数领域的应用,重点说明循环条件(r-l>1e-8)与精度控制的要点,确保结果保留6位小数的准确性。
最后会带来“一元三次方程求解”的课后挑战题解析,基于“函数值异号则区间内有根”的原理,将[-100,100]划分为长度1的区间,通过二分法逐个定位三个不同实根,进一步巩固二分思想在复杂问题中的灵活运用。
CSP复赛专题8-二分(二)
【CSP复赛专题8-二分(二)】 https://www.bilibili.com/video/BV1KTnfzLE92/?share_source=copy_web
本视频针对备战CSP复赛的编程学习者,尤其是想深入掌握二分查找进阶应用——“二分答案”技巧的同学。视频核心围绕二分思想在最优问题中的实践展开,通过具体例题拆解,帮助大家理解如何用二分优化暴力算法、降低时间复杂度,应对CSP复赛中高频的二分变种题型。
视频内将重点讲解三个经典例题:
- 伐木工人砍树问题:分析如何通过二分枚举锯片高度H,找到满足“获取至少M米木材”条件的最大H,理解二分答案“求最大满足条件值”的基本逻辑;
- 网线主管问题:结合精度处理(精确到厘米),演示如何确定最长网线长度,使其能切割出K条指定长度的网线,掌握二分在涉及小数场景的适配方法;
- 数列分段II问题:聚焦“最大值最小化”经典模型,讲解如何通过二分子段和的范围,找到将数列分成M段后“每段和最大值最小”的结果,明确二分范围确定与check函数设计的关键步骤。
CSP复赛专题9-数据结构1
【CSP复赛专题9-数据结构1】 https://www.bilibili.com/video/BV1M3x8zmEfs/?share_source=copy_web
本视频聚焦CSP复赛高频数据结构——栈与队列,专为备考CSP复赛的C++学习者设计,从基础原理到实战应用,逐步拆解核心考点。
视频内容涵盖:
- 栈的核心知识:详解栈“先入后出(FILO)”逻辑,包括栈顶/栈底概念、入栈/出栈操作,演示数组模拟栈的实现(栈指针管理、元素进出与栈顶访问),以及STL中stack容器的常用接口(push/pop/top/size/empty);
- 队列的核心知识:解析队列“先入先出(FIFO)”规则,讲解普通数组模拟队列的实现、循环队列的设计(解决数组空间浪费问题,含满/空判断、指针更新逻辑),以及STL中queue容器的接口使用(push/pop/front/back/size/empty);
- 栈与队列对比:明确二者在结构特性、操作逻辑上的异同,总结适用场景(栈用于括号匹配、后缀表达式等,队列用于广搜、模拟排队问题等);
- 实战例题精讲:结合两道经典例题(“表达式括号匹配”“猴子选大王”),完整演示解题思路、数据结构选型、代码实现过程,附带详细的模拟步骤与完整代码;
- 课后挑战指引:补充“后缀表达式求值”“Blah数集”两道拓展题目,提供解题方向(栈处理后缀表达式、双队列解决数集排序),帮助巩固知识点。
CSP复赛专题10-数据结构2
【CSP复赛专题10-数据结构2】 https://www.bilibili.com/video/BV1mJxRzEExU/?share_source=copy_web
本视频为CSP复赛备赛专题课,聚焦C++ STL中高频实用的数据结构及CSP复赛典型题型,适合CSP-J/S备赛选手、C++编程学习者巩固数据结构应用能力,尤其针对复赛中数据结构相关的代码实现与解题思路展开讲解。
视频首先系统梳理核心数据结构的特性、操作与适用场景:
- vector(向量):详解其动态内存分配、内存连续、支持随机访问的核心优势,核心操作包括下标访问(v[i])、边界访问(front/back)、元素修改(push_back/pop_back、insert/erase)、迭代器(begin/end/rbegin/rend)用法;同时覆盖一维/二维vector、结构体vector的初始化方式,结合“邻接表存图”说明其替代数组的实用场景。
- 优先队列(priority_queue):讲解默认大顶堆的实现与核心操作(push/top/pop),以及通过
greater<int>自定义小顶堆的方法,为后续哈夫曼树等场景铺垫基础。 - 双端队列(deque):对比vector(头部增删O(n))与queue(不支持随机访问)的局限,解析其队首/队尾增删(push_front/pop_front等)O(1)、随机访问(at(i))O(1)的特性,明确其“vector与queue结合体”的定位。
重点通过4道典型例题拆解“知识点→解题思路→代码实现”的完整流程,覆盖CSP复赛常见题型:
- 论坛帖子增查问题:用vector动态存储不同帖子的回复ID,实现ADD(尾部插入回复)与QUERY(指定位置查询回复)操作,处理“回复数不足返回-1”的边界场景;
- 哈夫曼树带权路径长度计算:通过优先队列模拟小顶堆,按“选最小两节点合并→累加路径长度→新节点入队”的步骤实现计算,详解“负权值转换”适配默认大顶堆的编码技巧;
- 龙的追踪问题:用deque存储龙身体各部分坐标,处理龙头移动(队首入新坐标、队尾删旧坐标)与指定部分坐标查询(随机访问),适配N≤1e6、Q≤1e5的大规模数据;
- CSP-J2019入门级T2(公交换乘):结合双端队列管理地铁优惠票(有效期45分钟、票价限制),模拟“地铁购票获票→公交优先用最早有效票”的逻辑,解析“超时票删除”“票有效性判断”等细节,适配n≤1e5的数据规模。
CSP复赛专题11-数据结构3
【CSP复赛专题11-数据结构3】 https://www.bilibili.com/video/BV1YLxfzqEW3/?share_source=copy_web
视频核心内容包括三大部分:
- 关联容器基础:详解set与multiset的特性(有序性、元素重复性差异)、内部红黑树实现逻辑,以及迭代器的双向访问规则;讲解pair结构体的创建(直接定义/make_pair)、成员访问(first/second)与比较规则;拆解map的键值对(
)映射逻辑,明确key的唯一性要求、multimap的特殊场景,以及容器内元素按key排序的特性。 - 函数与复杂度解析:逐一说明set(begin/insert/find/lower_bound/upper_bound等)、map([]访问/find/count/erase等)的核心函数用法,并标注各操作的时间复杂度(如插入、查找均为O(log n)),帮助大家优化代码效率。
- 实例与真题实战:通过结构体存入set、map存储姓名-分数映射等基础案例,帮助理解知识点;结合CSP复赛风格真题(如“诗歌在线评测”筛选最佳原创提交、“最近的一对”找相同元素最短距离),演示容器在实际解题中的应用思路;最后补充蓝桥2023国赛T2“主要成分”问题,讲解用unordered_map统计元素频次的解题方法。
CSP复赛专题12-递归
【CSP复赛专题12-递归】 https://www.bilibili.com/video/BV1VtxYzeEyf/?share_source=copy_web
本视频针对CSP复赛考生及需夯实递归基础的C++学习者,系统讲解递归算法核心内容。从递归的基本概念入手,解析“递”与“归”的两阶段过程及堆栈实现原理,明确递归三要素(终止条件、递归调用、返回结果),结合求和函数案例拆解递归执行流程;进一步对比普通递归与尾递归的差异,说明尾递归在上下文保存上的优势。
视频还聚焦CSP复赛常见递归题型,包括放苹果(相同苹果入相同盘子的分法计算)、小球摆放(错位分球)、上台阶(多阶走法计数)、十进制转二进制,针对每种题型详细推导递归逻辑,给出完整代码实现;特别针对上台阶问题中递归的重复计算问题,讲解记忆化递归优化方法,提升算法效率。
CSP复赛专题13-递推
【CSP复赛专题13-递推】 https://www.bilibili.com/video/BV13txkzsERY/?share_source=copy_web
视频先系统讲解递推算法的核心概念:明确递推是从初始条件出发,依据递推关系推出结果的过程,同时梳理递推题目需满足的条件(已知与所求存在关联),以及解题必须确定的两大关键——初始条件和递推关系,帮大家夯实理论基础。
实战部分将通过两道经典例题深化理解:一是“昆虫繁殖”问题,结合具体规则(成虫过x个月产y对卵、卵2个月长成成虫),详细推导成虫数量与新增卵数量的递推公式(ai = a{i-1} + b{i-2}、b_i = a{i-x} * y),并演示完整C++代码实现;二是“踩方格”问题,针对“只能北/东/西走、格子不可重复踩”的规则,引入u[](最后一步向上)、r[](最后一步向右)、l[](最后一步向左)的状态定义,推导各状态的递推公式(u[n] = u[n-1]+r[n-1]+l[n-1]等),同步展示代码编写过程。
CSP复赛专题14-搜索1
【CSP复赛专题14-搜索1】 https://www.bilibili.com/video/BV1ULxCzHEoc/?share_source=copy_web
本视频聚焦CSP复赛核心考点——深度优先搜索(DFS),专为C++编程学习者及备赛选手打造,系统讲解DFS的基础原理与实战应用。
视频开篇将拆解DFS的核心概念:明确其“一条路走到黑后回溯”的本质,说明DFS通过递归实现、回溯是递归副产品的特性,同时点出回溯算法虽不高效,但在无更优解法时的必要性,帮助观众建立对DFS的基础认知。
核心内容围绕三道经典例题展开,结合完整代码解析DFS的实际应用:
- 迷宫出口问题:针对n×n迷宫(0可通行、1不可通行),讲解如何通过DFS判断从起点A到终点B的可达性,重点演示“上下左右四方向遍历”“越界/已访问/不可通行判断”“现场标记与回溯”的实现逻辑;
- 连通块统计问题:在nxm方格图中,以四连通(上下左右)为规则,讲解如何用DFS搜索并统计黑色格子(标1)的连通块数量,明确“未访问黑格为起点启动搜索”“搜索中标记已访问格子”的核心步骤;
- 全排列问题:针对1~n的全排列生成需求,通过“盒子放置数字”的模拟思路,讲解DFS如何递归生成所有不重复排列,同时演示“数字使用状态标记”“按格式输出(每个数字占5个场宽)”的实现细节。
此外,视频还将解析两道课后挑战题目,拓展DFS的应用场景:
- 填涂颜色问题:针对含闭合圈(1构成)的n×n方阵,讲解“从边界0出发标记圈外0”“将未标记0替换为2”的解题思路,深化对“反向搜索标记”的理解;
- 组合的输出问题:针对从1~n中取r个元素(不分顺序、按字典序输出)的需求,讲解双参数DFS(起始数x、已选数个数k)的设计,确保组合内元素从小到大排列,掌握“约束条件下的DFS剪枝与搜索”技巧。
CSP复赛专题15-搜索2
【CSP复赛专题15-搜索2】 https://www.bilibili.com/video/BV11s47zVEwm/?share_source=copy_web 本期视频为CSP复赛专题系列第15期——搜索2,面向备考CSP复赛的同学,聚焦搜索算法的优化技巧与经典应用场景,旨在帮助大家深化对搜索的理解,高效攻克复赛中的搜索类难题。
视频核心内容包括:
- 剪枝策略详解:系统讲解DFS搜索树的剪枝逻辑,涵盖优化搜索顺序(优先搜索分支较少节点)、排除等效冗余(避免重复搜索等效子树)、可行性剪枝(实时检查状态合法性,如迷宫边界判断)、最优性剪枝(当前代价超最优解时终止分支)、记忆化(记录状态结果减少重复计算)五种常用剪枝方式,结合实例说明每种策略的适用场景与实现思路。
- BFS算法与模板:明确BFS的核心数据结构(队列)及“首个解即最优解”的特性,拆解BFS标准框架代码(初始状态入队、取出队首、遍历可达状态、满足条件入队),解析其在“最短、最快、最近”类问题中的应用逻辑。
- 经典例题实战:
- 八皇后问题:分析8×8棋盘上皇后摆放的约束条件(不同行、列、斜线),讲解基于DFS的实现方法,包括行、列、主副对角线冲突的判断逻辑(主对角线:行号-列号映射,副对角线:行号+列号映射),并展示完整代码与92种合法解的输出形式。
- 抓住那头牛问题:针对“农夫数轴移动找牛”场景(移动方式:X±1、2×X),说明BFS求解最短时间的思路,拆解状态转移(三种移动方式的合法性判断)与代码实现,验证“首个到达目标位置的步数即最优解”。
- 小猫爬山问题:围绕“小猫坐缆车下山(缆车有最大承重量)”求最少缆车数量,讲解剪枝策略的综合应用(小猫按重量从大到小排序优化搜索顺序、当前缆车数超已知最优解时的最优性剪枝、重量超限时的可行性剪枝),对比普通思路与优化后的代码效率,展示完整解题代码。
- DFS与BFS对比:总结两者核心差异(DFS“一条路走到黑”用递归,适用于方案数、可达性问题;BFS“圈层搜索”用队列,适用于最优解问题),结合示意图帮助同学明确不同场景下的算法选择。
- 知识总结:梳理搜索2专题的重点内容,强化剪枝策略、BFS模板、例题解题逻辑的记忆,为后续刷题与复赛实战奠定基础。
CSP复赛专题16-动态规划1
【CSP复赛专题16-动态规划1】 https://www.bilibili.com/video/BV1jV42z5Erk/?share_source=copy_web
本期视频聚焦CSP复赛核心考点——动态规划基础,针对CSP复赛考生及C++编程学习者,系统梳理动态规划核心逻辑与经典题型解题思路。
视频开篇将从动态规划的核心概念入手,详细讲解“重叠子问题”“最优性原理”“无后效性原则”三大关键特性,帮你建立动态规划的底层思维框架;随后深入剖析两类经典背包问题:01背包(含二维动态规划求解与一维优化实现)、完全背包(二维基础解法与一维优化技巧),结合代码逐行解析状态定义与转移逻辑,明确两类背包的核心差异与优化关键;接着讲解线性DP的典型应用,包括最长上升子序列(LIS)与最长公共子序列(LCS),推导状态转移方程,演示从暴力到优化的解题过程;最后结合“采药”“疯狂的采药”等CSP复赛真题案例,将理论知识落地到实际解题中,带你掌握从问题分析到代码实现的完整流程。
CSP复赛专题17-动态规划2
【CSP复赛专题17-动态规划2】 https://www.bilibili.com/video/BV1hx42zKEhU/?share_source=copy_web
本视频为CSP复赛专项讲解,聚焦动态规划核心模块——动态规划2,适合正在备战CSP复赛、需要巩固动态规划进阶知识的C++编程学习者。
视频中首先系统梳理线性DP的核心内容:详细讲解最长上升子序列(LIS)的状态定义(以A[i]为结尾的最长上升子序列长度)与转移方程推导,结合代码示例拆解遍历逻辑;深入剖析最长公共子序列(LCS)的状态表示(前缀子串A[1~i]与B[1~j]的LCS长度)及转移规则,并通过“回文词问题”(给定字符串求最少插入字符数)展示LCS的实际应用——将原字符串反转后与原串求LCS,用原串长度减去LCS长度即可得解,同步讲解完整代码实现。
随后重点讲解区间DP的核心思想:以“从小区间最优解推导大区间最优解”为核心,通过枚举区间长度、起点、分割点的步骤构建状态转移。结合两道经典例题展开:一是“卡特兰数相关问题”(n个节点构成的不同二叉排序树计数),详解区间DP的初始化(单个节点及空树的状态赋值)与转移公式(dp[i][j] = 累加dp[i][k-1]×dp[k+1][j],k为根节点);二是“最长回文子串问题”,对比LCS(子序列不连续)与子串(连续)的差异,通过区间DP状态(dp[i][j]表示子串i~j是否为回文)的初始化(单个字符、长度为2的子串)与转移逻辑(dp[i+1][j-1]为真且s[i]=s[j]时dp[i][j]为真),推导最长回文子串长度的求解过程,附带完整代码解析。
CSP复赛专题18-数学专题1
【CSP复赛专题18-数学专题1】 https://www.bilibili.com/video/BV1uz4XzDE9m/?share_source=copy_web
本视频为CSP复赛数学专题第一讲,聚焦CSP复赛中的基础数学核心考点,适合备考CSP复赛的编程学习者、C++编程初学者及相关爱好者观看,旨在帮助大家夯实数学基础,掌握考点对应的代码实现与解题思路。
视频核心内容包括:
- 整数与约数:讲解整除概念(a|b表示a整除b)、约数与倍数的定义,以及求约数的两种实现方式(数组写法、vector写法),并附排序处理逻辑;
- 最大公约数(gcd)与最小公倍数(lcm):剖析gcd的定义与公约数、最大公约数的判定,详细演示欧几里得算法(辗转相除法)的三种实现(递归、迭代、三目运算符)及时间复杂度;讲解lcm的定义与公倍数、最小公倍数的判定,重点推导lcm与gcd的关联公式(lcm(a,b)=a*b/gcd(a,b))并举例验证;
- 质数(素数)与合数:明确质数(大于1且仅能被1和自身整除)与合数的概念,说明1的特殊分类,补充1~10000内的质数分布数据;讲解质数判定的试除法实现,结合逻辑推导确保正确性;
- 算术基本定理与分解质因数:阐述算术基本定理(大于1的整数可分解为质因数连乘积),演示分解质因数的普通写法与递归写法;推导并讲解约数个数(d(n)=(e₁+1)(e₂+1)…(eₖ+1))、约数之和(s(n)=(p₁⁰+p₁¹+…+p₁^e₁)…*(pₖ⁰+pₖ¹+…+pₖ^eₖ))的计算方法,结合实例(如30的约数个数与和)辅助理解;
- 例题与代码实操:针对ABC334B(圣诞树,处理大数区间内圣诞树数量计算,含坐标平移与负数向下取整技巧)、ABC180C(奶油泡芙,枚举大数约数的优化思路——约数成对枚举)、“最大公约数和最小公倍数”匹配问题(推导P、Q的构造逻辑与枚举优化)及课后挑战ABC148C(小吃,应用lcm求解最小分配数量),逐题讲解解题思路、代码实现与优化技巧,附完整可运行代码模板。
CSP复赛专题19-数学专题2
【CSP复赛专题19-数学专题2】 https://www.bilibili.com/video/BV1CQ48zVEpB/?share_source=copy_web
视频核心内容包括四大模块:
- 基本计数原理:详细讲解加法原理(分类求和,如北京到上海交通方式计数)与乘法原理(分步求积,如穿衣搭配、套餐组合设计),结合实例明确两类原理的适用场景与计算方法;
- 排列组合:梳理排列数((A{n}^{r}))、组合数((C{n}^{r}))的公式推导,强调两者“是否有序”的核心区别,通过“风景点选择与排序”示例演示计算过程,补充组合数的重要性质((C{n}^{r}=C{n}^{n-r})、(C{n+1}^{r}=C{n}^{r}+C_{n}^{r-1}))及理解思路;
- 同余理论:解析同余概念((a \equiv b) (mod m)的定义)、自反性/对称性/传递性等基本性质,重点讲解同余在加法、乘法运算中的应用(边算边取余避免大数溢出),结合具体计算示例强化理解;
- 素数筛法:对比普通筛法(暴力枚举,时间复杂度(O(n\sqrt{n})))、埃氏筛法((O(n \log \log n)),筛除质数倍数)、线性筛法(欧拉筛,(O(n)),仅用最小质因子筛除合数)的原理与C++实现逻辑,明确各筛法的优势与适用场景。
此外,视频还通过“便利店商品组合计数”“大数乘法取模(ABC-DEF)”“区间真素数判断”三个实战例题,拆解“数学知识→解题思路→C++代码”的转化过程,帮助学习者掌握实际问题的求解方法;最后补充哥德巴赫猜想的验证任务,引导巩固素数判断与枚举应用,强化知识落地能力。全程注重原理讲解与代码实践结合,助力攻克CSP复赛数学模块难点。
