- 博客(17)
- 收藏
- 关注
原创 树状数组与结合dp
对于正整数x,可以被分解为:为正整数)。那么这个数可以被分为log级的若干数。对于区间 [ l,r ] ,也可以被分解为log级别的小区间。我们定义lowbit(x)表示x的二进制中最低位的那个1.也就是说,lowbit(6)=2,因为如何实现lowbit呢?我们先给出结论,然后我们给予证明:对于二进制为xx...xx100...000的数p,其中左面的若干x为0/1,中间的1是其最低位的1,右边的都是0。
2025-07-14 11:31:15
1041
原创 树状数组与结合dp
本文介绍了树状数组的基本原理与应用。树状数组通过lowbit运算实现高效的单点修改和区间查询,时间复杂度为O(logN)。主要内容包括:1. 树状数组的实现原理,利用x&-x计算lowbit值;2. 三种基本操作:单点修改区间查询、区间修改单点查询、区间修改区间查询;3. 实际应用如逆序对统计、二维偏序问题;4. 结合动态规划的优化应用。树状数组代码简洁但思维难度较大,特别适合处理需要快速单点修改和区间查询的问题。文章还简要提及了二维树状数组及其与线段树的比较。
2025-07-14 11:14:56
918
原创 动态规划(3):数位dp与状态压缩dp
状态压缩dp,简称状压dp。状压更多与十进制无关。我们以二进制为例:对于二进制串:0010101001,我们发现第3/5/7/10位是1,其他位是0。如果我们赋予这个1一个特殊含义,比如这个位置有个人。那么我们可以用一个二进制串表示某一排的人物排列状态。设长度为m,由于每一位都是0或1,所以有种情况。如果再用十进制数x表示二进制串,则x范围是:0~。这就是状压dp!用十进制数表示某一进制串,进而表示某一种排列状态。今天浅讲一下与进制有关的dp,说实话这真的很恶心。
2025-07-11 21:17:31
886
原创 动态规划:(2):树形dp与换根dp
本文介绍了树形动态规划(DP)的基本概念和应用场景。首先通过一道热身题展示了树结构问题的解题思路,随后详细讲解了树形DP的实现方法,包括状态转移方程设计和递归求解过程。文章还介绍了换根DP技术,用于求解以所有节点为根的最优解问题,并通过例题演示了如何利用子树信息优化计算。最后,作者总结了树形DP的核心思想,并强调通过具体例题理解抽象算法的学习方法。全文以通俗易懂的方式呈现了树形DP的基本框架和典型应用。
2025-07-10 21:32:06
967
原创 动态规划(1):线性dp与其前缀优化
首先,请你记住 dp 这个名字。(加深印象中:dp、dp、dp、dp……)事实上,动态规划只是一种抽象的概念,而这里的定义也只是一个概述。(以下简称 dp)线性 dp,就是指我们借助已有的dp值,线性地去推进得到未知的 dp 值。这可以是一维线性的、二维线性的、三维线性……什么是线性呢?线性,就是指两个变量之间依赖于一种关系,即其函数图像是一条线而并非杂乱无章的。比如,y=2*x,z=,这都是线性关系。不禁想到了松弛操作,松弛是借助已有的最短路得到新的最短路。
2025-07-10 07:10:03
835
原创 贪吃蛇单人版
今天的贪吃蛇单人版不完全属于原创,也不属于转载(因为其他文章没有这个代码),而是《青少年信息学奥赛培优课程(入门篇)》黑皮书封面的代码,经过本人优化后得以运行啦。
2025-07-09 07:04:53
173
原创 图论基础(2)
本文介绍了图论中的最小生成树和最短路算法。最小生成树部分讲解了Kruskal算法(基于边权排序和并查集)和Prim算法(基于点分类和贪心),指出Kruskal更常用但Prim适用于特定场景。最短路部分对比了单源最短路的Dijkstra(稳定但无法处理负权)和SPFA(通用但效率不稳定),以及多元最短路的Floyed算法(适用于小规模图)。通过例题展示了算法应用场景,强调掌握这些基础算法对图论学习的重要性。全文以通俗易懂的语言解析算法原理,并提供代码片段辅助理解。
2025-07-07 20:16:03
774
原创 图论基础(1)
本文介绍了图论基础知识,重点讲解了图的定义、基本概念(顶点、边、无向/有向图、连通性等)和两种存储方式(邻接矩阵和邻接表)。文章详细阐述了图的DFS/BFS遍历方法及其应用场景,并通过电梯问题示例演示了BFS的实际应用。此外,还讲解了并查集的原理、实现及优化(路径压缩和启发式合并),以及拓扑排序的算法流程。最后指出后续将涉及最小生成树、最短路等更深入的图论内容。全文以通俗易懂的语言配合代码示例,系统性地介绍了图论的核心概念和基础算法。
2025-07-06 20:53:38
788
原创 DFS/BFS搜索优化
本文主要讲解DFS和BFS的搜索优化方法。DFS优化包括五种剪枝策略:优化搜索顺序(如小猫运输问题)、排除等效冗余、可行性剪枝、最优性剪枝和记忆化搜索,使用优先级递减。BFS优化则主要通过双端队列处理边权差异、Hash判重避免重复状态以及双向BFS提升效率(如电路板问题)。文章强调这些优化方法需要在实际问题中灵活应用,并预告后续将讨论图论相关的搜索内容。
2025-07-06 09:16:32
685
原创 线性字符串算法
本文介绍了四种线性字符串处理算法:1. 字符串哈希:通过将字符串转化为数值实现快速比较,预处理O(n),查询O(1),可用于子串匹配和循环节检测;2. KMP算法:利用部分匹配表优化字符串匹配,避免回溯,时间复杂度O(n+m);3. Manacher算法:专门处理回文串问题,通过预处理将偶回文转化为奇回文,线性时间求解;4. 最小表示法:通过双指针比较快速找到字典序最小的循环同构字符串。这些算法针对不同字符串问题各具优势,其中哈希应用最广,而其他算法在特定场景下效率更高。
2025-07-04 20:52:30
848
2
原创 贪心+二分+倍增,带你迅速提升!
所谓贪心,就是在对问题求解时,总是采用当前最好的选择。贪心的本质就是,根据题目要求,求最大值的时候,每步尽量求差值最大,求最小值的时候,每步尽量求差值最小。贪心方案很难想出来,尤其是赛场上,多数靠直觉,没时间证明;当然,很多时候贪心算法是不正确的,一是问题不适用贪心,二是贪心思路不正确。所以,我们有一个方法叫做——对拍。对拍,也就是写一个暴力直接的方法,输入多组不同的数据,用贪心和暴力分别去求答案,验证贪心思路是否正确。错误的贪心可能比超时的搜索拿分多哦(最擅长骗分拉啦)。
2025-07-03 21:08:32
778
原创 2024 csp-j 第二轮讲解+感受
2024年10月,正常迎来了csp-j竞赛的第二轮考试。虽然一等分数线是200分左右,比去年高出不少,但幸运的是前三题都很简单,轻松可以300起步。先来看一下讲解吧!
2024-11-16 11:46:32
1478
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人