C++算法集训
文章平均质量分 92
以C++为编译语言进行的编程类算法竞赛准备,分享相应的acwing、力扣、洛谷、AtCode等题目分类研究训练。
Williamtym
来自浙江,寻求志同道合的兄弟们一起加油努力啊!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法竞赛备赛之斜率优化的DP问题
在处理下图的最小截距问题上面,我们该如何在维护的凸包中找到战距最小的点?相当于在一个单调的队列中,找到第一个大于某一个数的点。斜率单调递增,新加的点的横坐标也单调递增。在查询的时候,可以将队头小于当前斜率的点全部删掉。在插入的时候,将队尾所有不在凸包上的点全部删掉。当斜率不再具有单调性,但是新加的点的横坐标一定单调递增。在查询的时候,只能二分来查找在插入的时候,将队尾所有不在鼓包上的点全部删掉。原创 2024-02-27 13:25:48 · 2583 阅读 · 15 评论 -
单调队列优化DP问题
然而,FJ的草坪非常脏乱,因此,FJ只能够让他的奶牛来完成这项工作。因此,现在FJ需要你的帮助,找到最合理的安排方案并计算FJ可以得到的最大效率。在一开始的时候,汽车内油量为零,John 每到一个车站就把该站所有的油都带上(起点站亦是如此),行驶过程中不能出现没有油的情况。有一个a x b的整数组成的矩阵,现请你从中找出一个n x n的正方形区域,使得该区域所有数中的最大值和最小值之差最小。输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。原创 2024-02-13 14:59:59 · 3021 阅读 · 23 评论 -
算法竞赛备赛进阶之数位DP训练
数位DP的思想就是对每一位进行DP,计算时记忆化每一位可以有的状态,其作用是减少运算时间,避免重复计算。数位DP是一种计数用的DP,一般就是要统计一个区间[A,B]内满足一些条件数的个数。以1e9甚至1e18、1e100的问题为例,因为在统计情况下有很多重复的计算,数位DP实现了相同状态只计算一次,从而大幅减少运算时间。数位DP:技巧1:[X, Y] => f(Y) - f(X-1)技巧2:用树进行排列。原创 2024-01-16 10:50:14 · 3655 阅读 · 16 评论 -
算法竞赛备赛进阶之树形DP训练
树形DP是一种动态规划方法,主要用于解决树形结构的问题。在树形DP中,通常会使用动态规划的思想来求解最优化问题。其核心在于通过不断地分解问题和优化子问题来解决原问题,以达到提高效率的目的。树形DP的实现通常会使用递归或迭代的方式,其中递归的方式较为直观,而迭代的方式则可以避免递归可能导致的栈溢出问题。在树形DP中,通常会使用状态转移方程来描述子问题与原问题之间的关系,以及如何从子问题的解推导出原问题的解。通过不断地优化子问题,最终可以求解出原问题的解。原创 2023-12-17 16:44:15 · 4971 阅读 · 22 评论 -
算法竞赛备赛进阶之区间DP训练
区间动态规划(Interval Dynamic Programming,简称 IDP)是一种动态规划算法,用于解决包含区间状态的优化问题。在区间动态规划中,问题可以划分为多个不重叠的区间,每个区间可以独立求解,并且状态在相邻区间之间是独立的。区间动态规划的基本思想是将原问题转化为一系列子问题,每个子问题只涉及一个区间,然后使用动态规划算法求解每个子问题。在求解每个子问题的过程中,可以使用状态转移方程来更新区间状态。下面是一个简单的例子,说明如何使用区间动态规划求解区间和问题。原创 2023-12-05 19:05:39 · 3373 阅读 · 26 评论 -
算法竞赛备赛进阶之状态机模型训练
算法状态机(ASM)图是一种描述时序数字系统控制过程的算法流程图,其结构形式类似于计算机中的程序流程图。ASM图是用一些特定符号按规定的连接方式来描述数字系统的功能。应用ASM图设计数字系统,可以很容易将语言描述的设计问题变成时序流程图的描述,只要描述逻辑设计问题的时序流程图一旦形成,状态函数和输出函数就容易获得,从而得出相应的硬件电路。原创 2023-11-17 21:13:41 · 1874 阅读 · 23 评论 -
算法竞赛备赛进阶之状态压缩训练
状态压缩DP是一种暴力的算法,它需要遍历每个状态,而每个状态是多个事件的集合。这种算法通常用于小规模问题的求解,因为它的复杂度是指数级别的。状态压缩DP的两个基本特征包括问题的数据规模特别小,可以通过2的阶乘次进行求解,且题目通常都是选与不选两种选择,可以使用二进制串表示。状态压缩DP通常使用二进制数来表示状态。原创 2023-11-26 01:22:05 · 3967 阅读 · 23 评论 -
算法竞赛备赛进阶之背包问题训练
背包问题闫氏分析法回顾:状态表示f[i, j]集合:所有只从当前i个物品中选,且总体积不超过j的选法的集合属性:Max/Min/X+Count状态计算:按最后一步来划分01背包问题:每个物品选与不选完全背包问题:每个物品选0,选1个,选2个,.....多重背包问题:每个物品选0,.........,选si个总结:只有完全背包问题,当空间优化成一维以后,背包问题的体积是从小到大循环的;而其它的背包问题都是从大到小循环的。原创 2023-10-24 14:56:18 · 3553 阅读 · 30 评论 -
算法竞赛备赛进阶之最大上升子序列训练
回顾前文的最大上升子序列问题我们是采用了闫氏DP分析法动态规划:状态表示f[i]集合:所有以a[i]结尾的严格单调上升子序列属性:Max/Min/数量状态计算划分依据:最后一个不同的点贪心算法章节也有相应的解法。原创 2023-10-24 14:36:55 · 3274 阅读 · 33 评论 -
算法竞赛备赛进阶之数字三角形模型训练
在算法竞赛中,有时候会遇到一些图形相关的题目,需要运用图论相关的知识进行求解。今天我们将一起探讨一个比较常见的模型——数字三角形模型。在数字三角形模型中,每个位置的值是唯一的,而且从前一个位置到当前位置只能沿着三角形的一条边走。以一个数字三角形的顶端开始,可以通过向下或向右移动一步来达到下一个位置,依此类推。以下是一个数字三角形模型的例子:123345456756789现在,假设有一个数字三角形,每个位置的值都是非负整数,并且每个位置的值不能超过该位置的行数。原创 2023-10-08 16:04:07 · 4974 阅读 · 43 评论 -
算法竞赛备赛之贪心算法训练提升,贪心算法基础掌握
给定N个闭区间[ai, bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量,位于区间端点上的点也算作是区间内。将每个按区间的右端点从小到大排序从前往后依次枚举每个区间如果当前区间中已经包含点,则直接pass否则,选择当前区间的右端点给定N个比区间[ai, bi],请你在数轴选择若干区间,使得选中的区间之间互不相交(包括端点)输出可选取区间的最大数量。原创 2023-10-01 11:21:13 · 5796 阅读 · 34 评论 -
算法竞赛备赛之动态规划训练提升,DP基础掌握
01背包问题是在M件物品中选择若干件放在空间为W的背包中,每件物品的体积为W1,W2至Wn,价值为P1,P2至Pn,01背包的约束条件是给定几种物品,每种物品有且只有一个,并且有权值和体积两个属性。多重背包问题是在M种物品中选择若干件放在容量为W的背包中,每种物品有无限多个,01背包的约束条件是给定几种物品,每种物品有且只有一个,并且有权值和体积两个属性。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。原创 2023-09-26 17:16:25 · 7075 阅读 · 35 评论 -
算法竞赛备赛之数学知识训练提升,暑期集训营培训
Lucas定理的推导过程为:首先需要这个算式:x^f mod p,然后(1+x)n= (1+x)t * (1+x)(n-t) mod p,所以得(1+x)^(t*(p-1)) mod p=11。给定n个0和n个1,他们按照某种顺序排成长度为2n的序列,求它们能排列组合的所有序列中,能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少。设R=(a^f) % n,因为a与n互质,所以a^f与n互质,所以R属于[1,n)。aφ(n)≡1(mod n),其中,a aa与n nn均为正整数,且两者互质。原创 2023-09-02 10:36:55 · 4655 阅读 · 41 评论 -
算法竞赛备赛之搜索与图论训练提升,暑期集训营培训
设G=(V,E)是无向图,如果根据顶点V可分割为两个互不相交的子集(A,B),且图中的每条边(i,j)所关联的两个顶点i和j分属这两个不同的顶点集(i∈A,j∈B),则图G就是一个二分图。该算法的基本思路是从起点开始,每次选择一个距离起点最近的节点,并更新起点到各个节点的距离。二分图有最大匹配和最小匹配问题,在二分图中的一个匹配是指边集中任意两条边都不依附于同一个顶点,极大匹配是指在当前已完成的匹配下,无法再通过增加未完成匹配的边的方式来增加匹配的边数,最大匹配是所有极大匹配当中边数最大的一个匹配。原创 2023-08-14 08:56:50 · 3433 阅读 · 42 评论 -
算法竞赛备赛之经典数据结构训练提升,暑期集训营培训
从根节点开始,按照字符串的字符顺序依次遍历每个字符,如果当前节点的子节点中没有对应字符,则说明该字符串不存在于Trie中。在Trie中,插入一个字符串的操作是从根节点开始,按照字符串的字符顺序依次遍历每个字符,如果当前节点的子节点中没有对应字符,就新建一个子节点,并将当前节点移动到该子节点。给定个长度为的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。每个节点存储它的父节点,p[x]表示x的父节点。原创 2023-07-23 09:08:21 · 3274 阅读 · 34 评论 -
算法竞赛备赛之经典基础算法训练提升,暑期集训营培训
经典必须掌握的基础算法:排序:快速排序、归并排序、二分:整数、浮点数、高精度:高精度加法、高精度减法、高精度乘法、高精度除法、前缀和、差分、双指针算法、位运算、离散化、unique函数实现、区间合并原创 2023-07-10 15:49:25 · 5963 阅读 · 45 评论
分享