- 博客(50)
- 收藏
- 关注
原创 算法刷题-动态规划3(未完待续---------
的一部分物品用来存放物品i带来的价值,哪个更大?(取出多少呢,当然是刚好能放下物品 i 的重量,即w[i]),当物品 i 的重量小于背包的总承重时,我们就要进行对比,前面 i - 1个物品所带来的价值和现在要取出背包中。选择一个个地来装入背包,背包的承重量不断地增加,二维数组中,列为物品i,行为背包的承重量)。当物品 i 的重量大于背包当前的总承重时,该物品不能放入背包;把更大的那个价值对当前背包价值进行更新。(待回顾和复习)美好的一天从每日一题开死。
2023-11-27 16:47:52 230
原创 C++语法知识点-vector+子数组
Vector是一个封装了动态大小数组的顺序容器(SequenceContainer)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二维vector数组vector Arrayname[size];Arrayname[]中的每一个元素都是一个vector。我们可以把二维vector数组当做两个维都可以变长的二维数组来理解。初始化://初始化5个值为0的元素//定义了5个整型元素的向量,且给出每个元素的初值为1//从数组中获得初值。
2023-11-23 20:58:16 601
原创 算法刷题-动态规划2
所以得出状态表达式,dp[ i ][ j ] = max( dp[ i ][ j - 1 ],dp[ i - 1 ][ j ] ) + g[ i ][ j ]第一种是从上面来的礼物最大价值:dp[ i ][ j ] = dp[ i - 1 ][ j ] + g[ i ][ j ]第二种是从左面来的礼物最大价值:dp[ i ][ j ] = dp[ i ][ j - 1 ] + g[ i ][ j ]为了简洁代码,多增加一行。多开一行使得代码更加的简洁。
2023-11-22 21:08:13 484
原创 算法刷题-动态规划-1
题目中的关系代数是 dp[ i ] = dp[ i - 1 ] + dp[ i - 2 ] + dp[ i - 3。s[ i ] 和 s[ i - 1 ] 一起解码,当 s[ i - 1 ] * 10 + s[ i ] 的值是 10~26 的时候就可以解码,dp[ 1 ] 位置,如果 dp[ 1 ] 能自己解码,就 + 1,如果能跟 dp[ 0 ] 一起解码,就再 + 1,自己解码的方案数就是 dp[ i - 1 ],如果 s[ i ] 的值是 0,那方案数就是0,整体解码失败,
2023-11-22 20:02:45 391
原创 算法笔记-第十章-动态规划2
2.如果存在A[i]之前的元素A[j],(j<i),使得A[j]<=A[i]且dp[j]+1>dp[i],(即把A[i]跟在以A[j]结尾的LIS后面能比当前以A[i]结尾的LIS长度更长), 那么就把A[i],跟在以A[j],结尾的LIS后面,形成一条更长的不下降序列。(dp[i]=dp[j]+1)因此 dp[i][j] 就会继承dp[i-1][j]与dp[i][j-1]中的较大值,即有dp[i[j]=max{dp[i-1][j],dp[i][j-1]}A[i-1]+A[i]=dp[i-1]+A[i]
2023-11-22 15:05:03 172
原创 算法笔记-第十章-动态规划-递归写法和递推写法
那么时候时候为截至的条件呢?=数塔的最后一层的dp值总是等于元素本身,即dp[n][j]=f[n][j],(1<=j<=n)将这种可以确定其结果的部分称为边界,而递推的写法总是从这些边界出发,通过状态转移方程扩散到整个数组。由此可知:要想求出指定的位置到达最底层的最大的路径之和的表达式为:dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+f[i][j]1.先确定数组dp[i][j]的含义:表示从第i行第j个数字出发到达最底层的所有路径中可以得到的最大值。
2023-11-22 10:40:12 165
原创 算法笔记-第十章-图的存储
在邻接表中,对图中每个顶点都建立一个单链表,在第i个单链表中的节点表示衣依附于顶点vi的边。1.邻接表是图的一种链式存储结构,而邻接矩阵是图的一种顺序存储结构(数组)。2.若无向图中有n个节点、e条边,则它的邻接表需要n个头结点和2e个表结点。无论有向图还是无向图,其邻接表不唯一,而邻接矩阵唯一。
2023-11-21 17:18:11 289
原创 算法笔记-第九章-堆(未完成-=需要好好搞搞题目)
方法:将他和他的父元素比较,若大于父节点则进行交换,直到无法上移为止。将破坏堆序性的元素和他的最大的子结点比较,如果小于则进行交换。两种操作 :一个是插入队列,一个是弹出最小元素。一般使用小根堆来实现,弹出之后需要调整操作‘问题:如果有一个乱序的数组如何进行建堆呢?将新元素放到堆的最后一位,然后进行上滤操作。将最后一个元素放到根节点,然后进行下滤操作。现在就是只有树的最后一个元素破坏了堆序性。有两种方法:自下而上和自上而下。插入操作:上滤操作就是插入操作。如何将树调整成堆呢?
2023-11-20 21:21:23 343
原创 算法笔记-第九章-并查集(未完成)
如果将左边的并查集改变成下边的并查集,查询的效率就会该百年很多。把其中一个根节点r2的parent指向另一个点r1。上面的方法,在查询结点4的时候需要查找多次。1.先用find函数找到3的树根r1=0。2.用find函数找到6的树根r2=5。return i 所在集合树的根结点。3.判断r1和r2是否相等,进行合并。就以union(3,6)为例。
2023-11-20 16:21:08 95
原创 算法笔记-第九章-二叉查找树
若它的左子树不空,则左子树上所有结点的值均小于它根结点的值。若它的右子树不空,则右子树上所有结点的值均大于它根结点的值。它的左、右树又分为⼆叉排序树显然,二叉排序树与二叉树一样,也是通过递归的形式定义的。因此,它的操作也都是基于递归的方式。大佬讲解一大佬讲解二。
2023-11-20 11:18:03 163
原创 计算机组成原理学习的目的是什么
其实计算机组成原理这门课,主要的目的,就是让你会造CPU,并理解计算机世界的运行原理,它教你二进制(定点的,浮点的)的运算原理,教你指令集系统的基本构成,教你计算机中程序的运行原理(带操作系统和不带操作系统的都有),教你怎么完成一个简单的CPU五级流水线,教你基本的访存系统的理论知识,以及如何完成一个基本的Cache,完成一个TLB。然后再给你科普科普GPU长什么样,处理器的向量扩展大致该怎么搞,为什么需要它们;再拓展拓展云端并行处理的多处理器结构,现代处理的多核结构等等等等。
2023-11-17 15:13:11 200
原创 算法笔记-第九章-树的遍历(未完成-待整理)
push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素),而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。但是无法预知子节点的个数,所以只能将数组的个数加到不确定的位置。指针域存放所有子结点的地址,或者可以存放所有子结点地址,题目的思路不是递归也不是迭代,所有要理解的话,需要理解。(遍历树的前序,中序,后序遍历的递归法和迭代法)左右孩子,然后根结点。
2023-11-17 10:24:23 173
原创 算法笔记-第五章-大整数运算
二:把整数按照字符串读入的时候,实际是逆序存储的,就是在读入数组的首需要翻转一下。push_back() 在Vector最后添加一个元素(参数为要插入的值);一:使用数组存储整数的时候,整数的高位存储在数组的高位,整数的低位存储。一个vector便可以模拟一个大整数,每位数字倒序储存在vector中。c.back() 返回c容器的最后一个元素的值,并不是该元素的地址。c.push_back(X) 将元素X加入到c容器的最后一位。删除Vector容器中的最后一个元素;vector简单模拟大整数。
2023-11-16 09:44:49 147
原创 专题知识点-二叉树-(非常有意义的一篇文章)
如果等于KEY的数字则讲这个指针赋值到q里面,其实就是对于数的分一个分支进行分别的访问和。例题,对于二叉树的数据域进行分别进行查找,找一个数据域是否等于一个KEY的数,题目进行输出二叉树中第k个指针的值。// 其实就是引用了栈的应用,先。//二叉树非递归进行代码处理。
2023-11-14 21:09:08 232
原创 算法笔记-第七章-链表(未完成)
一:将原链表的节点逐个放下来,头插入newhead链表。因为改变了节点的next的指向,还得定义一个next来保存下个地址。二:然后将newhead移到cur的位置,再改cur为next,往下走,直到当cur走到NULL。直接遍历一遍链表,如果设置条件中出现了数据相等的情况。将newhead定义为NULL,为新的头节点。则进行指向下一个指针,否则进行进行遍历。思路尽在其中,需要好好搞搞理解。一:递归操作(日后复习)遍历链表中重复的元素。
2023-11-14 16:42:14 269
原创 算法笔记-第七章-队列
一:queue是一种容器转换器模板,调用#include< queue>即可使用队列类。4.empty() 如果队列空则返回true。5.front() 返回队列中的第一个元素。6.back() 返回队列中最后一个元素。1.push() 在队尾插入一个元素。3.size() 返回队列中元素个数。2.pop() 删除队列第一个元素。二:使用queue 表示队列。
2023-11-13 22:13:39 282
原创 算法笔记-第七章-栈的应用(未完成)
一:C++用vector来表示二维数组;必须先将vector定义为二维数组:vector A。栈(Stack)是只允许在一端进行插入或删除操作的线性表。(抄录)-两个矩阵之和。
2023-11-13 16:52:31 172
原创 算法笔记-第五章-素数
在这里插入图片描述](https://img-blog.csdnimg.cn/61298fca1493407cac00d42aeadc8d97.png)memset(isPrime, true, sizeof(isPrime));//这个表示的是c++中的一个函数,局势对于数组进行赋值操作,后面是空间的大小。每次k和k+2都是素食,所有只要考虑的是截止的是第几个就行了。//本质是将所有数进行枚举,然后进行判断素数。//可以用布尔函数进行改变和判断。
2023-11-13 12:12:21 95
原创 算法笔记-二分1
在这里插入图片描述](https://img-blog.csdnimg.cn/0847288cf870499792a1f4aa9a81741f.png)我认为在这里输出的下标r,l都是可以的。但是输出l定点的时候加上了一些条件。
2023-11-12 20:18:10 54
原创 算法笔记-贪心1
/贪心算法//保证局部最优,从而使最后得到的结果是全局最优的int main()int n, m;//n表示的是孩子的饥饿数,m表示的是饼干i < n;i++)j < m;j++)//都需要进行排序//找到可以吃饱的孩子的数目int a1= 0;//能吃饱孩子的数目int b1 = 0;//饼干的下标return a1;
2023-11-12 17:08:18 120
原创 算法笔记——递归(1)
/其中考察的知识点有tring sub2 = s.substr(5, 3);//从下标为5开始截取长度为3位:sub2 = “567”//需要知道的是在c++中string库中 字符相加是自动的链接的。不能无限制地调用本身,须有个出口,化简为非递归状况处理。当n=1时,f[n]=1 n=2时 f[n]=1。上楼问题,一共有n级台阶,每次选择上一级或者两级。n>2时 f(n)=f(n-1)+f(n-2)子问题须与原始问题为同样的事,且更为简单。给定一个正整数n,求结果第n项f[n]一级->一级->一级;
2023-11-12 13:59:00 93
原创 算法笔记-散列
/先进行输入字符串,利用hash方法,需要确立两个点。//2.全部hash数组确立的范围=数据的数目。//c++中定义和赋值一个字符串。//1.输入数据的范围。
2023-11-10 21:29:00 88
原创 11.6日数学
我实在是不想在学学数学了,我自我放弃了,长时间时间分配的不合理,导致我现在真的一点都不想学习或者说是看到数学,脑子现在就是完全就是不想进行思考数学题目。
2023-11-06 19:53:22 41
原创 11.5日算法学习总结
一:从n/2开始,还有一个角度可以理解,因为n是最大值,n/2是n的父节点,因为n是最大,所以n/2是最大的有子节点的父节点,所以从n/2往前遍历,就可以把整个数组遍历一遍。这指的是对数组进行排序,如果要将无序数组排序成升序,一般使用大根堆,每次将堆顶元素与未排序的最后一个元素交换,再调整堆。因此使用小根堆,每次输出堆顶,并把堆顶移除序列,再调整堆,重复m次即可。然后“升序采用大顶堆”是因为要交换堆顶与堆尾元素,然后再把小的元素下滤下去使得堆为一个大顶堆,重复此操作,数组中的元素就变成升序的了。
2023-11-05 21:49:57 81 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人