自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 操作系统——优先权算法c++实现

这个比较麻烦,我的思路就是记录下当前时刻的时间,然后循环寻找到达时间小于当前时间的小的并且优先级别较大的,然后比较找到的id是不是目前执行的,如果不是,说明目前的进程会被打断,然后找出从当前时刻到他理想结束时刻的时间(只是理想,不一定会到达)在这个理想时间以内,如果这个时间内有进程来了,并且该进程的优先级更高,说明是目前需要被打段的,然后目前这个进程运行到的时间就是新进程到达的时间,如果没有优先级更高的化就把自己执行完毕。需要注意的是不是直接按照进程时间为关键字直接排序,而是对当前时刻的最短进程。

2024-04-28 23:43:34 429 1

原创 银行家算法实现

该部分就是逐个检查当前资源数量是否全部大于所需要的资源数量,如果都大于了,说明是可以分配的,那就分配给他让他做这个进程,注意,当这个进程做完之后,那他还要释放他所持有的所有资源。首先会给我们这样一个表,分别是最大需要资源数量,当前有多少个资源,那么很明显,还需要多少个资源就是前者减去后者。当前要给当前的某个进程再分配一些资源,即当前拥有的资源数量增多,需要的资源数减少,闲置的资源减少,问是否安全。原来值需要2个资源就够了,但你给他发了3个,他根本用不了这么多,属于资源浪费,这样分配是不合法的。

2024-04-18 16:11:40 357

原创 题解 P3295 【[SCOI2016]萌萌哒】

先引用一下这位大佬的题解,对此我再进行细化题解 P3295 【[SCOI2016]萌萌哒】 - 洛谷专栏。

2024-03-26 21:39:54 402

原创 Android studio编写一个简单的登录界面

然后点开layout文件,开始编写我们的项目,右上角有三个选项分别为,展示代码,代码加效果,效果,这里我们选择代码加图片方便查看,当前为代码加效果,再点击一次还可以切换成上下。然后我们设置用户头像,并居中,编写如下代码,id是随便取的,但是需要记住,等下调节页面布局的时候需要用到。然后点开res,复制一张图片,右键drawable点击粘贴,这里放的是图片资源,用于放置登录头像。1首先先创建一个空的activity项目,接着设置自己的项目名称,勾选上lacuncher。把刚刚创建的文件名下面的。

2024-03-14 12:43:46 4892 2

原创 2024牛客寒假算法基础集训营2

我们可以用一个set来实现,当然12的数量也不一定是均分的,所以必然会存在一个数字落单的情况,比如111212,前两个1是落单的,需要两次操作,于是我们只需要最后判断一下,一个没有了一个还有,加上有的那个的大小就可以了。首先需要注意的是在边界的时候也是需要网的,不能靠墙壁防住,然后每一个格子需要4个网,然后每两个格子相邻的话,相邻的格子就只需要一个网,对于当前格子,我们枚举一下当前格子的四个方向,看看有没有在我们map中,在的话然后减一下,得出最后的答案。添加图片注释,不超过 140 字(可选)

2024-02-05 22:44:22 609

原创 2024牛客寒假算法基础集训营1

首先对于一个满减 ,满 a1 减 b1 ,如果另外一个满减,满 a2 减 b2 ,如果满足 a2>=a1,那么如果购买的金额 大于 a2 的时候,所获得的减免就是 b1+b2 ,于是我们想到先减免要求价格从小到大排序一下,利用前缀和记录 bi ,于是便获得了大于某个价格的最大减免,由于要求得是能购买的最大值,于是我们可以从减免要求价格从大往下开始遍历,如果当前价格减去减免额之后小于给定的 m ,说明是合法的,最终的原价就是 m+ 减免额。同时榜单上还有"向左"按钮与"向右"按钮来切换显示的题目。

2024-02-02 21:37:15 2215 4

原创 通过二叉树的后序遍历和中序遍历还原一棵二叉树

本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。

2024-01-05 18:52:48 520 1

原创 实现一棵二叉搜索树

函数Delete将X从二叉搜索树BST中删除,并返回结果树的根结点指针;如果X不在树中,则打印一行Not Found并返回原树的根结点指针;函数Find在二叉搜索树BST中找到X,返回该结点的指针;如果找不到则返回空指针;函数Insert将X插入二叉搜索树BST并返回结果树的根结点指针;函数FindMin返回二叉搜索树BST中最小元结点的指针;函数FindMax返回二叉搜索树BST中最大元结点的指针。

2023-12-31 00:34:12 351

原创 算法学习笔记 同余最短路

那么更一般的,设 di 表示满足 k≡i(moda) 的最小 k ,于是可以凑出 i 的个数便是 [(H−di)/a]+1 ,那么如果我们能计算出所有的 di 即 d0,d1,d2,...,da−1 那我们的答案就是 ∑i=0i=a−1[(H−di)/a]+1(di​≤H)了解了这里之后我们便有如下思考,既然找到一个 k ,那他后面可以凑出来的数字我们就知道了,不需要再去计算出来具体的了,于是我们想到要是 k 最小就好了,这样我们可以省去很多计算,直接带入上述公式就可以了。

2023-12-29 18:35:08 1730

原创 洛谷P2680 运输计划(LCA+树上差分+二分)

对于每条路径加上相同数,我们利用差分,设差分数组为sum[x](表示的是1到x),那么要把x,y的路径都加上1,就相当于把x到lca(x,y)加上1和lca(x,y)到y之一段加上1,于是sum[x]++,sum[y]++,但是sum表示的是由于是根节点到x,于是我们刚刚多加了两次从根节点到lca(x,y),于是最后还需sum[lca(x,y)]-2。d(x,y)=dis[x]-dis[lca(x,y)]+dis[y]-dis[lca(x,y)],求LCA的方式有很多,这里采用的是倍增的方式。

2023-12-23 23:00:22 54

原创 数据结构期末题目

其中List/* 存储结点数据 *//* 指向下一个结点的指针 *//* 定义单链表类型 */L是给定单链表,函数Reverse要返回被逆转后的链表。其中head是用户传入的链表的头指针;函数reverse将链表head逆置,并返回结果链表的头指针。其中List/* 存储结点数据 *//* 指向下一个结点的指针 *//* 定义单链表类型 */L是给定的带头结点的单链表,K是每段的长度。函数K_Reverse应将L中的结点按要求分段逆转。其中ListL是给定单链表,函数。

2023-12-21 00:27:09 57

原创 求前缀表达式的值

无论式前缀,中缀还是后缀表达式,他的叶子节点一定是数字,非叶子节点是运算符由于是前缀表达式,所以先有运算符,后有数字,于是我们从后往前遍历,每读完一个数字就压入栈中,当读到运算符时,就将栈顶的两个元素取出,计算结果并将值压入栈中,最终栈内剩下的一个元素就是最终答案。

2023-12-11 00:25:01 65

原创 图的建立储存以及遍历

我们先利用几张图回顾一下图的储存方式。

2023-12-08 11:04:17 57 1

原创 深度优先搜索(dfs)以及优化

我们已经学习了bfs,他是用来解决从某一个点到另外一个点的最短距离的一种方法。但我们遇到的搜索问题还有这样一类,就是问你一共有到某个点一共有多少种不同的路径,这样我们的bfs处理起来就会很麻烦,于是我们引入dfs。对于深度优先搜素,顾名思义,就是搜索的时候优先向深处搜,直到搜到不能再搜我们再一步一步往后回溯。每次搜不到就会往回退一步,由于具有这个特性,他搜索的时候可以全部搜索一遍,而不像bfs一样,第一次到达就截止,由此我们便可以算出有多少种不同的方案。

2023-12-05 22:34:29 869

原创 宽度优先搜索(BFS)进阶

从一个起始节点开始把附近与其连通的节点提取出或填充成不同颜色颜色,直到封闭区域内的所有节点都被处理过为止,是从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法。以下图为例,黄色部分将整个矩形分成了两个连通块,现在我们往第一个联通块里面注水,于是他就会向他的四周开始蔓延,知道整个块都被蔓延完毕。当我们左边这个连通块蔓延完毕之后,我们才会蔓延右边这个连通块。了解完毕这个之后我们来看一道例题加深理解。

2023-12-03 00:33:05 144 1

原创 哈夫曼树+哈夫曼树编码

实现方法为1,构造全是根的森林2,选择两棵权重较小的根构造出一棵新树3,把权重较小的两棵树删除4,重复2,3操作。

2023-12-01 10:23:12 57 1

原创 单调队列优化dp

如上图,可以跳到 3−7 这个区间,跳到 3 和 4 的时候,都是消耗劳累度的,但是我们选择哪个更好呢,当然是越大的越好,因为高度越高,下一次越有利,如上图,当我们跳到 4 ,下一次跳到 3 的时候就不增加劳累度。如果暴力枚举那个区间,一般会超时,于是我们可以选择将最大值放入队头的最大值或者最小值,通过这样维护我们可以减去暴力枚举的过程,优化了时间复杂度。维护这样一个队列的好处是,当我们想求最大值的时候,我们只需要保证队列是单调递增的,于是每次取出队头就是我们的最大值。第一个元素下标进队列,此时队列为。

2023-11-28 10:56:32 392

原创 二叉树的基本操作

【代码】二叉树的基本操作。

2023-11-24 10:20:22 68 1

原创 树形dp——换根dp

通过观察,我们发现,右边的深度减少了,左边的增加了,减少的节点为未换根之前以0为根节点经过2的所有路径上的节点,增加的为没有经过2的。我们假设某个节点为根,将无根树化为有根树,在搜索dfs统计子树的深度和,则可以用一次搜索算出以该节点为根时的深度和,其时间复杂度为。就表示为上升的深度,不经过child的子节点树都增加,不经过的节点数目就是从节点数目减去经过的节点数目。如图,我们的根节点就是0,接下来我们选取子节点2作为新的根节点,对其进行换根。但这样求解出的答案只是以该节点为根的,并不是最优解。

2023-11-23 22:22:54 241

原创 动态规划-树形dp

众所周知,树是一个有 n 个节点,n−1 条无向边的图。这种图可以表示一些事物之间的关系,且这种关系是联通的、无环的。当动态规划建立在一种依赖关系(或者其它互相的关系)之上,树形 dp 便是解决这类问题的好帮手。通常对于树上的每一个节点,我们要求的 dp 的值通过其父亲节点/儿子节点推算过来。对于特殊的节点(根节点、叶子节点),有时需要初始化。由于树是一种无向边的图,于是我们在建树的时候需要建立双向的,例如,即如果 u 与 v 相连,我们需要建立 u→v 以及 v→u。

2023-11-22 21:39:17 83

原创 KMP字符串匹配

本篇文章 “洛谷网校 阮行止”,加上了自己的一些见解与思考首先我们先来了解一下什么是字符串匹配:“对于字符串 P 是否是字符串 S 的子串?如果是,它出现在 S 的哪些位置?” 其中 S 称为;P 称为。下面的图片展示了一个例子。对于上述图片,主串是 "tobeornortobe",模式串由两个分别是 "ob"和 "no"。首先对于 "ob" 匹配的结果是 :出现了一次,从S[6]开始;“ob”的匹配结果是:出现了两次,分别从s[1]、s[10]开始的;注意这里的下标是从0开始的。

2023-11-18 21:13:42 55 1

原创 流水线作业调度问题——Johnson不等式

现在我们来分析一下最差方案,对于方案4,使其成为最差的主要原因是因为出现了等待的时间,a3加工时间实在是太长了,但是我们必须等他结束了才能进行b3。对于这个问题,我们的直观想法就是使ai尽可能的短,bi尽可能的长,这样当我们再进行bi的同时a(i+1)就可以开始运作,就可以省去向下面图4的情况第二台已经空出来了,可是我还得等待a(i+1)加工完毕。我们分析一下在第二台机器上的加工时间,首先b2是不可能超过a2的,所以我们可以直接加上b2,然后只需考虑前面,由上图便可得到以下等式。

2023-11-17 13:09:51 471 1

原创 动态规划dp 登山

题目描述五一到了,ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?输入格式第一行包含整数N,表示景点数量。第二行包含N个整数,表示每个景点的海拔。输出格式输出一个整数,表示最多能浏览的景点数。数据范围。

2023-11-15 18:00:00 29

原创 dp动态规划 方格取数

为了让整体的值更大,所以我们得小心地选,尽量避免影响第二条路径受到影响,使用这里我们需要考虑两条路一起选择。这道题要我们求的是走了两次的路径之和的最大值,我们首先可能会想到用两次dp来做,第一次选择最大的,然后把最大路径上的数字都置为空,第二次再选择最大的,然后相加就是题目最优解。来表示坐标上的值,然后对于两条路径同时走,就可能会出现重合的这种状态,但是对于如上问题,每个点上的值只能取一次。但是用四维来表示是状态是不是有点大,于是我们考虑一下优化,因为每次只能向右或者向下走一步,所以每次。

2023-11-14 17:27:55 50 3

原创 广度优先搜索

在我们遇到的一些问题当中,有些问题不能够确切的建立数学模型,或即便有数学模型但该模型的准确方法也不一定能运用现成算法。在要求枚举方案时,常常会遇到这一类问题。解决这一类问题,我们一般采用搜索的方法解决,即从初始状态出发,运用题目所给出的条件和规则扩展所有可能情况,从中找出满足题意要求的解答。•状态:指当前所面临的具体问题•转移:指从一个状态到另一状态的一种决策•状态和转移可能是题目中已经给出,也可能是需要自己分析出的。一道题的状态与决策可能有多种。•。

2023-11-14 10:53:52 608

原创 动态规划数位dp

【代码】动态规划数位dp。

2023-11-07 15:47:46 76 2

原创 状态压缩dp的一些例题

【代码】状态压缩dp的题目

2023-11-07 08:44:18 25

原创 动态规划区间dp问题

表示右边区间,根据1024的规则,当左边的值和右边的值相等的时候我们才可以进行转移,根据题意,转移之后是要加1,并不是翻倍,题目要求我们可以将两个相邻的相同的数合并,每次合并得到的数是原来的数+1,求最后能得到的最大分值。表示从左端点l到右端点r其中合并能获得的最大分值,每次合并后+1。实际上也 应该是0,但是这里会导更新成1,导致更新错误。我们来思考一下这个状态转移方程,我们只需要在。当然本体还得考虑一下特殊情况如果。后续会继续更新,敬请期待。内枚举一个断点k,所以。所以本题的转移方程就是。

2023-11-03 10:49:04 52

原创 完全背包问题

有一个背包容量为n,有质量为a,b,c三种质量的物体,求装满并且数量最大,即每件物体的价值为1。在第二个例子中,Polycarpus 可以这样剪彩带:第一段长度为 5,第二段长度为 2。在第一个例子中,波利卡普斯可以这样剪彩:第一段长度为 2,第二段长度为 3。≤ 4000) - 原始色带的长度和切割后色带片的可接受长度。打印一个数字--可能的最大丝带片数。保证至少存在一个正确的剪彩。请帮助波利卡普斯找出剪切后的丝带片数。第一行包含四个空格分隔的整数。波利卡普有一条丝带,长度为。

2023-11-02 20:43:19 47

原创 java多态之对象多态

【代码】java多态之对象多态。

2023-10-26 09:08:25 33

原创 Java重写equals方法比较两个对象是否相等以及equals和==的区别

里面提到了个equals()和==我们来看一下题目有上面区别。基本数据类型就是指的是int,double这些。最后奉上一个完整的样例代码方便测试。

2023-10-24 23:14:11 142

原创 数组模拟双链表

由于链表写起来非常长并且效率比较低,所以我们采用数组来模拟一下链表,执行快且写起来快首先先发一个题目背景,来自luogu的1160队列安排。

2023-10-24 14:32:24 37

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除