笔记
文章平均质量分 62
mmy_669
这个作者很懒,什么都没留下…
展开
-
【01背包】
2. 计算: f[i, j] 一定是以下两种情况种的一种 (1) 选了 第 i 件物品 f[i, j] = f[i - 1, j - vi] + wi (2) 没选第 i 件物品 f[i, j] = f[i - 1, j] f[i, j] = max(f[i - 1, j - vi] + wi, f[i - 1, j]);1. 集合:从前 i 种物品中选,(每种物品最多 1 件), 总体积不超过 j 的所有选法的集合 属性:max。原创 2023-02-16 15:46:17 · 58 阅读 · 0 评论 -
【线性Dp】
2. 集合计算: f[i, j] = max(f[i - 1, j], f[i - 1, j - 1]) + g[i, j];f[1, 1] = g[1, 1] 3. 初始化 (边界)2. 这个集合怎么算 (1) f[3, 2] 表示所有从[1, 1] 开始走, 走到 [3, 2] 这个位置的所有走法。1. 集合:所有从(1, 1) 开始走, 走到(i, j) 这个位置的所有走法的集合 数(属性) : Max。一. f[i][j] 用一个数代表某个集合。dfs(1, 1);原创 2023-02-16 15:33:00 · 79 阅读 · 0 评论 -
【四种排序代码】
+i) // 枚举每一种值i,指针j用来枚举填充答案数组中的位置。/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */#define ARR_LEN 255 /*数组长度上限*//* 2. 对所有元素均重复以上步骤,直至最后一个元素 */#define elemType int /*元素类型*/// 维护最终有序序列。// 把基准数放到i的位置。/* 冒泡排序 *//* 插入排序 */原创 2023-01-31 15:16:53 · 63 阅读 · 0 评论 -
【图的存储和遍历】
void DFirst(Mgraph mg, VertaxType ver, visited& visited, Stack& stack)//深度优先遍历。void WFirst(Mgraph mg, VertaxType ver, visited& visited, Queue& queue)//广度优先遍历。if (vexIsTrue(mg, temVer, visited))//与该顶点相连接的所有顶点都已经访问,顶点出栈。完全图:从图的任意一个顶点可以直接到达其余各个顶点的图。原创 2023-01-16 09:40:12 · 139 阅读 · 0 评论 -
【集合简单概述】
我们关心的是,对于给定的元素,可以很快的找到这个元素所在的集合(的代表),以及合并两个元素所在的集合,而且这些操作的时间复杂度都是常数级。原创 2023-01-11 13:18:51 · 90 阅读 · 1 评论 -
【排序算法】
一.计数排序。原创 2023-01-06 11:34:46 · 159 阅读 · 1 评论 -
【数据结构】
6.2数组模拟的栈可以O(1)取出从栈顶往下数第k个元素(stk[top-k+1),⽽STL实现的栈不可以。//top指向栈顶。基底是0则top=-1,是1则top=0。6.1STL⾥⾯的stack没有清空函数,只能⼀个⼀个出栈or新建⼀个栈。5.1依次判断top是否存在,并删除top。5.2直接将top指针指向基地址。//该结点的父结点在数组中的下标位置。stk.top();stk.top();数组模拟与STL容器。原创 2022-12-26 13:22:58 · 99 阅读 · 1 评论 -
【时空复杂度】
查找一个数出现的第一个下标 暴力O(n) 正解:二分查找O(logn)int mid=(l+r)>>1;(取中间点mid=(l+r)/2)数组命名方式:const int N=1000010;原创 2022-12-21 11:41:55 · 95 阅读 · 1 评论