算法
文章平均质量分 66
不想学算法了
算法苦手,又菜又爱玩,蓝桥杯c++/b组国二,码蹄杯国铜,ccf/csp国排前12%的蒟蒻
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动态规划状态定义三剑客:恰好、至少、至多
状态dp[i][j]表示考虑前i个物品,恰好 达到条件j时的最优值。特点:要求严格满足条件,不能多也不能少。典型应用:01背包问题中要求恰好装满背包的情况。理解"恰好"、"至少"和"至多"三种状态定义的区别,是掌握动态规划的关键。恰好:严格相等,初始化严格至少:允许超额,转移特殊处理至多:允许不足,初始化宽松在解题时,选择正确的状态定义,配合恰当的初始化和状态转移,才能得到正确的答案。希望通过本文的介绍,能帮助大家更好地区分和应用这三种状态定义。原创 2026-03-04 00:07:48 · 481 阅读 · 0 评论 -
前缀和与差分
摘要:二维前缀和是一种高效计算矩阵子区域和的技术。通过预处理构建前缀和矩阵sum,其中sum[i][j]表示从(0,0)到(i,j)的矩形区域和。利用公式sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]可在O(1)时间内完成任意子矩阵求和。实现时建议从1开始索引并添加0值边界,使用long long防止溢出。预处理时间复杂度O(n×m),查询O(1),适用于大规模矩阵查询场景。原创 2026-01-18 23:16:22 · 88 阅读 · 0 评论 -
自定义排序与lamda表达式
在一些时候,只是使用c++自带的sort函数并不能满足我们对排序的需求,这时候就需要用到利用自定义比较函数了;// 定义比较函数:降序排列// 当a>b时返回true,表示a应该排在b前面// 使用自定义比较函数排序// 输出:9 6 5 4 3 2 1 1return 0;int score;int age;// 假设我们增加一个年龄字段// 使用Lambda表达式:按成绩降序,成绩相同时按年龄升序// 首先,按成绩降序// 成绩相同,则按年龄升序});原创 2026-01-17 11:23:55 · 965 阅读 · 0 评论 -
st表模板
st表:静态求区间最值的一种数据结构,是稀疏表,本质是dp。练习题:蓝桥区间最大值。原创 2025-11-28 21:41:47 · 136 阅读 · 0 评论 -
素数筛模板
对于判断n是否是素数有O(sqrt(n))的方法,如果标记n以内的素数时间复杂度为O(nsqrt(n)),所以引出素数筛。(因为i已经可被prime[j]整除,所以k中一定可以分解出一个更小的质因数prime[j])但是埃氏筛可能会将一个素数的倍数进行重复标记(如16是2的倍数也是8的倍数),就会浪费时间。原创 2025-11-30 00:30:28 · 460 阅读 · 0 评论 -
二进制模板
假设n为6,二进制:0110,6-lowbit(6)=0100为4,4-lowbit(4)=0000。方法一:逐次移位&1(相同++),直到移到31位(返回二进制x第一个为1的位置代表的十进制数。负数的反码=符号位不变,其余按位取反。负数的补码=反码+1。为了让减法运算与加法运算统一。原创 2025-12-02 00:28:45 · 188 阅读 · 0 评论 -
树状数组与线段树
本文介绍了两种高效处理区间查询和修改的数据结构:树状数组和线段树。树状数组(BIT)通过二进制索引实现O(logn)的单点更新和前缀和查询,适合动态序列处理,代码简洁高效。线段树基于分治思想,支持区间查询和修改,通过懒惰标记优化区间更新操作,时间复杂度为O(logn)。文章详细讲解了两种数据结构的核心原理、存储方式和实现模板,包括lowbit运算、数组C[]构建、标记下传等关键技术,并比较了它们的适用场景和性能特点,为算法竞赛和工程应用提供了实用参考。原创 2025-11-28 21:11:26 · 351 阅读 · 0 评论 -
小船过河问题
定义dp[i]为前i+1个人(即索引 0 到 i)过河所需的最小时间。这里,我们假设过河时间已排序,即,其中a[i]是第 i 个人的过河时间(索引从 0 开始)。原创 2026-01-10 15:29:57 · 805 阅读 · 0 评论 -
KMP算法模板
Pj,next[j+1]可能的次大值为next[next[j]]+1,以此类推可以高效求出next[j+1](重点)(不同索引的模式串,不同初始化的next都会影响next的含义,这里只解释索引从0开始,初始化0的含义)1.next[j+1]的最大值为next[j]+1;代码中的j有两重含义,(1)练习题:蓝桥斤斤计较的小z。个字符(索引从0开始),原创 2025-12-01 10:20:21 · 239 阅读 · 0 评论 -
二分答案法模板
浮点二分相较于整数二分最大的区别就是存在浮点误差,如果循环条件使用l,r,循环多次将会累计浮点误差,导致最后结果产生偏差,所以采用固定的循环次数,在本题中结果保留6位小数,二分每次循环会将范围缩小1/2,100次会缩小1,267,650,600,228,229,401,496,703,205,376,远超结果所需精度。lower_bound: 返回第一个不小于(即大于或等于)目标值的元素位置。假设两个区域:蓝色区域,红色区域,通过控制l,r指针管理不同区域。l指针指向-1,r指针指向n+1。原创 2025-12-01 10:19:56 · 303 阅读 · 0 评论 -
三分法模板
三分法是你解决单峰优化问题的一把利器。它的核心在于“取三舍一” ,通过不断排除不可能包含极值的区间来逼近答案。识别:准确判断问题是否具有单峰性质。实现:熟练运用三等分点比较和区间缩小的代码模板。应用:敢于在复杂问题(如三分套三分)中加以运用。原创 2026-01-10 16:19:53 · 1399 阅读 · 0 评论 -
并查集模板
【代码】并查集模板。原创 2025-11-28 21:23:14 · 140 阅读 · 0 评论 -
基础树上问题模板
以重心为根时,它的每个子树的大小都不超过整棵树节点总数的一半。1.最近公共祖先LCA查询(倍增LCA)类似于st表。一棵树最多有两个重心,且如果存在两个重心,则它们。定义:树中某个节点,删除它后,使得剩余。原创 2025-11-28 21:00:02 · 372 阅读 · 0 评论
分享