- 博客(28)
- 收藏
- 关注
原创 01背包、完全背包、多重背包、分组背包问题讲解
背包问题的核心是:在限定容量的背包中,选择一组物品使得总价值最大。不同变种的区别在于物品的选择限制:0-1 背包:每种物品。完全背包:每种物品可以选。多重背包:每种物品有。分组背包:将所有物品分成若干组,每组物品中最多只能。
2025-05-21 16:29:59
518
原创 【01背包】[USACO09MAR] Cow Frisbee Team S
因为这题的奶牛数量范围最大为2000,每头奶牛的能力最大为1e5,乘起来就得到了2e8级别的数字,这还只是j的范围。f[0][0]初始化为1,f[0][0]本身是有意义的,它表示在0头牛中选出总能力模f后为0的方案数,什么都不选本身就符合条件,所以它的方案数为1。,那么我们只需要枚举 j 到 F-1 的位置就可以了啊,每次计算能力都模F,这样整个 j 的数据范围就落在了 0 ~ 999,如下图。最终结果在f[n][0]中,0表示总能力和模f后为0,那么总能力就是f的倍数,符合题意。
2025-05-15 15:41:32
717
原创 【包含例题P1955、P1892、P2024、P1196】并查集、扩展域并查集、带权并查集
基础并查集就像管理多个独立的家族,每个家族有一个族长(根节点)。主要解决两大问题:找族长(Find):查询某个成员属于哪个家族,每一个家族都有一个族长做代表。联姻(Union):把两个家族合并成一个大家族。
2025-05-08 12:56:43
641
原创 【优化策略】离散化
离散化是算法设计中处理大数据范围时的关键技巧,它将大范围的数据映射到有较小的的离散空间中,同时保持数据的相对关系。本质:将原始数据映射到紧凑的连续整数空间数学表示:建立映射函数 f: ℝ → ℤ,满足 x < y ⇒ f(x) < f(y)
2025-05-07 22:26:31
376
原创 【多源01BFS】Codeforce:Three States
表示荒地(可以修建道路)。:表示岩石(不可通行)。数字 1、2、3:分别表示三个国家的位置。目标:将最少数量的荒地(.)改造成道路,使得三个国家之间互相连通(即任意两国之间存在一条路径)。如果无法实现,输出 -1。数据范围:1 ≤ n, m ≤ 1000(即网格最大为 1000×1000)。
2025-04-24 16:13:45
1046
原创 【01BFS】概念讲解 && 解法 && 例题讲解:P4554小明的游戏
01BFS” 是一种图遍历算法,常用于中找最短路径。你需要从起点出发,找到到所有点的最短路径。相比普通的 Dijkstra 算法,01BFS 更高效,在这种特殊图结构下能达到 线性时间复杂度 O(N + M),其中 N 是节点数,M 是边数。这个图的边的权重要么是 0,要么是 1。
2025-04-23 00:33:04
644
原创 【基础算法】二分算法详解
二分算法是一种在有序区间中查找答案的方法,时间复杂度:O(log n)。每次把搜索区间分成两半,只保留可能存在答案的那一半,直到找到目标或搜索区间为空。
2025-04-21 23:12:57
917
原创 【BFS】P1379 八数码难题
这一题的核心思想就是将字符串中的’0’(出口位置)的坐标转换成实际在二维数组中的坐标,然后在二维数组中模拟上下左右的移动,判断合法后再将移动后的坐标转换成一维坐标(在字符串中的坐标),然后在字符串中进行操作。这里将这种操作简单地称为二维坐标转一维度坐标,一维坐标转二维度坐标,注意:它的实现要基于0-base。有的同学可能会想,二维坐标向上下左右四个方向移动在字符串中的规律体现是是分别移动了-1,1,-3,3个单位,直接定义一个在字符串内水平的方向向量来移动这样不行吗?空格周围的棋子可以移到空格中。
2025-04-21 11:38:12
613
原创 【记忆化搜索】P1434 滑雪
链接: 洛谷P1434Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度会减小。在上面的例子中,一条可行的滑坡为 24−17−16−124-17-16-124−17−16−1(从 242424 开始,在 111 结束)。当然
2025-04-17 20:44:42
883
原创 【记忆化搜索】P1464 Function && P5635 天下第一
对于一个递归函数wabca≤0b≤0c≤01a20b20c20w202020abbcwabc−1wab−1c−1−wab−1cwa−1bcwa−1b−1cwa−1bc−1−wa−1b−1c−1这是个简单的递归函数,但实现起来可能会有些问题。当abc均为15时,调用的次数将非常的多。你要想个办法才行。注意:例如w30−10又满足条件1。
2025-04-16 23:45:18
931
原创 求最大公约数与最小公倍数
两个整数的最大公约数(GCD)等于其中较小数与两数相除余数的最大公约数持续递归/迭代,直到余数为0时,此时的除数即为最大公约数。
2025-03-28 20:31:29
410
原创 【排序】快速排序
快速排序(Quick Sort)有多种实现方式,包括左右指针法、前后指针法、挖坑法和荷兰国旗法等等。这些方法的核心思想都是通过将数组划分为两部分,但具体的划分方式和实现细节有所不同。下面我会详细解释它们的区别和特点。本文所有代码用c++实现,想要。
2025-03-16 00:36:58
766
原创 leetcode 75.颜色分类(荷兰国旗问题)
本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。要想单独解决这道题本身还是很简单的,统计0、1、2的数量然后按顺序赋值,或者手写一个冒泡排序,whatever。但是在这一题中我们主要学习它的思想,题目想要将,那么就要用到。时间复杂度O(n)。在本文的最后会附上leetcode的双指针法,但是本文的主要目的就是学会三指针法,不管哪种方式,核心思想是差不多的,本题的思想同样也是快速排序中对于大量重复元素的优化方式,甚至可以直接作为快排的核心算法。
2025-03-15 21:29:42
717
原创 【数据结构】二叉搜索树、平衡搜索树、红黑树
黑高度(black-height)是指从某个节点到叶子节点的路径上的黑色节点数量(不包括该节点本身)。根据性质5,所有路径的黑高度相同。
2025-03-10 21:13:42
1271
原创 【数据结构】堆和priority_queue
T:存储的数据类型(如 int)。Container:底层存储结构,默认是 std::vector(但也可以用 std::deque 等)。Compare:比较函数对象,决定优先级顺序,默认是 std::less(最大堆)。默认是 大根堆,std::less 表示大的值优先,std::greater 表示小的值优先。就是这个比较反人性,跟常规的比较函数是反过来的。可以提供一个 自定义比较函数 作为 priority_queue 的第三个模板参数。
2025-03-05 09:57:52
910
原创 【数据结构】树的存储(孩子表示法)与遍历(DFS,BFS)
有序树:结点的子树严格按照从左到右的顺序排列无序树:结点的子树之前没有顺序有根树:树的根是确定的无根树:数的根是不确定的,谁都有可能是树的根。
2025-03-02 15:19:21
635
原创 【C/C++】字符数组和string字符串:从C语言到C++的演变
定义字符数组时,必须指定数组的大小或通过初始化让编译器推断大小。//直接在程序内储存数据// 手动定义长度:定义一个长度为100的字符数组,并用str1来储存"hello world"这个c语言风格的字符串//自动适应长度:不直接填写字符数组的具体大小,直接通过c语言风格字符串来初始化str2//通过标准输入流存储数据//需要指定字符数组的大小//直接写 char str5[];会导致编译错误,因为编译器不知道数组需要多大//err。
2024-12-25 16:12:54
1232
原创 【C/C++】输入输出(getchar、putchar、scanf、printf、cin、cout讲解)
如果输入是 123 后没有任何空格或者换行,
2024-12-18 17:29:42
1466
原创 【C/C++】数据存储和类型转换(大小端字节序,原反补码,整型提升与算术转换)
在计算机中,数字在内存中的存储方式有两种:大端(Big Endian)和小端(Little Endian)。:数据的高位字节存储在低地址处,低位字节存储在高地址处。,可以记为“大头在前”。高字节决定了一个数据的主体部分,比如说一百万零四千,一百万才是这个数字的主要量级。例如,整数0x12345678在内存中的存储顺序为:0x12 0x34 0x56 0x78:数据的低位字节存储在低地址处,高位字节存储在高地址处。例如,整数0x12345678。
2024-12-17 23:12:16
1921
原创 【排序】直接插入排序和希尔排序
在本篇博客中,我们将介绍(Insertion Sort)和(Shell Sort)算法,并通过 C 语言代码实现这两种排序方法。
2024-12-05 01:25:12
1041
原创 【数据结构】leetcode144二叉树前序遍历题解中的一些细节及解题思路-C语言实现-输出型参数和输入型参数-递归-传址调用和传值调用的区别
这是题目给出的接口,可以看到给了两个参数,struct TreeNode* 类型的 root 节点和 int* 类型的returnSize这个 returnSize 是用来干什么的?题目要求我们返回一个整形数组,这个返回值为int*的函数只能返回一个值,而OJ题拿到这个指针却不知道数组内有多少个元素,就无法进行遍历。所以这时候依靠returnSize来将数组的大小带出去这个 returnSize 就叫。
2024-12-02 22:16:05
1181
原创 【C/C++】二进制运算符(位运算符)
注意:a & b是对 a 和 b 两个数进行操作,先将两个数的数值转化为二进制形式,再一一对应进行操作,其它运算符同理按位与操作会将两个操作数的每一对应位只有当两个对应的二进制位都为1时,结果为1;否则为0注意:二进制的 1 被代表真,而 二进制的 0 代表假,用 对二进制的每一位进行逻辑与(&&)操作来理解两个数的按位与(&)运算更为易懂,逻辑与就是两个条件必须同时为真(两个位同时为1)才是真(对应的结果位为1),大家不需要去记按位与遇到0就变0这种口诀。int a = 5;
2024-11-13 00:19:12
1188
原创 scrapy项目中pymysql与虚拟机mysql连接异常的解决方案-2004 time out连接
这个错误意味着 MySQL 拒绝了用户 'root'@'%' 对数据库 'spider01' 的访问,因为该用户在尝试访问该数据库时没有足够的权限。否则报错 1044, "Access denied for user 'root'@'%' to database 'spider01'"#这将为用户 'root' 授予对数据库 'spider01' 的完全权限,并刷新权限以使更改生效。确保用户 'root' 具有足够的权限来访问数据库 'spider01'# PASSWORD也是被允许远程连接的用户的密码。
2024-11-09 18:31:10
2159
原创 GitHub push失败解决办法-unable to access-OpenSSL SSL_read: Connection was reset
在文件夹中使用tortoisegit成功add文件并且commit成功后,push到GitHub时一直报错,如下图报这种错误一般都是网络问题,无法访问GitHub,为git添加代理即可注意:127.0.0.1:后的“*****” 为你自己电脑的代理端口号,不要照抄别人的,没有用,不会找的看下面这篇文章如果设置错了可以用以下命令取消设置:选择配置 HTTP 代理或 HTTPS 代理取决于你访问的 Git 仓库的协议类型。
2024-11-08 20:48:37
912
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人