- 博客(15)
- 收藏
- 关注
原创 动态规划之三:线形,树型,矩阵动规
1.1.1 一推一类型:比如等比等差数列 q(n)=q(n-1)*p(p为公比),a(n)=a(n-1)+d(a为公差)1.1.2 多推一类型:比如兔子数列 f(n)=f(n-1)+f(n-2) ,最长不降子序列。累加和:s(n)s(n-1)+n ,累乘积:f(n)=f(n-1)*n。1.3.2 多推一(人人为我):数塔问题,背包问题,最长公共子序列问题。1.3.1 一推多(我为人人):数塔问题。1.2.2 子推父(多推一)2.1 最长不降子序列问题。2.3 最长公共子序列问题。
2023-01-15 10:16:58 141
原创 BFS(广度优先搜索)
DFS使用必要的变量有vis[],ans[],BFS用的变量有vis[],father[].1.2 DFS使用栈(是隐式的栈,先进后出),BFS使用队列(先进先出,后进后出).1.3 通常DFS可以找到所有的路径,BFS可以找到最短路径。3.2 STL实现队列(推荐使用),即知父亲就能找到所有的孩子.,即他的重复性和符合约束条件.BFS与DFS的共同点。BFS与DFS的区别。考虑孩子的合法性判断。
2023-01-08 09:11:29 90
原创 DFS算法(深度优先搜索)
2.1判孩子(当根结点为虚空的时候适合,比如子集树,排列树,组合树,拆分树)2.2判父亲(当根节点不是虚空的时候适合,比如搜索树)3.5搜索树(找出从起点到终点的所有路径)1.3子集树:左孩子为0,右孩子为1。1.4拆分树:孩子要大于等于父亲。1.1排序树:孩子不与组前重复。1.5搜索树:孩子不与祖前重复。1.2组合树:孩子要大于父亲。二,判答案的两种方法。
2023-01-01 20:57:38 104
原创 c++基础知识复习
使用memset(数组名,初始值,数组大小)函数可以将一个数组的初始值设置成0或者-1,或者很大的数,这是很容易实现的,但是设置成其他值不容易实现,比较麻烦。4.continue是跳过本次循环(只跳过本次循环,循环还在继续),break是跳过整个循环(循环结束),return是直接结束程序。如果将数组设成任意一个数,对于一维数组,使用一重for循环逐个设置,对于二维数组,用双重for循环逐个设置。5.函数是用一小段代码来代替一大段代码,提高了代码的复用性,提高了程序的简洁性,也提高了编程的效率。
2022-12-11 20:13:05 328
原创 动态规划之二:背包问题求解
1.01背包问题:方法一:贪心算法(按价值排序,依次选取)但是局部最优并不能保证全局最优方法二:贪心算法(按性价比排序,依次选取)但是局部最优并不能保证全局最优方法三:枚举法(用子集树枚举出所有的方案,然后挑选符合要求的最佳方案)缺点是时间复杂度太高(指数级复杂度)方法四:动态规划 用一维数组实现: 关键点1.从右向左填2.使用滑动窗口的方法,右端点的值=左端点的值+第i个物品的价值2.完全背包问题:关键点:1.从左向右填(与01背包问题相反)2.使用滑动窗口的方法,右端点的值=左端点的值+第i
2022-12-04 21:56:12 157
原创 动态规划之一:基本知识
2.缺点:当数据规模较大时,运行时间很长(用动态规划(记忆化搜索)算法进行优化)原因是有重复计算。2.动态规划的关键是递推公式(非常难推出),即状态转移方程。1.背包问题:01背包,完全背包,多重背包,二维背包。4.常用名词:阶段,阶段变量,状态,状态变量。1.动态规划是一步一总结,步步为营。注:记忆化搜索是空间来换时间。1.优点:程序代码简洁明了。一,用递归的办法求兔子数列。二,记忆化搜索求兔子数列。3.代码很短但非常难理解。2.最长不降子序列问题。3.最长公共子序列问题。三,动态规划求兔子数列。
2022-11-27 21:58:48 222
原创 拓扑排序算法
2.使用BFS算法求解。(使用栈和队列求解)一:拓扑排序就是将有向无环图变成一个序列。关键点1:有向图,无向图无法进行拓扑排序。关键点2:无环图,有环图无法进行拓扑排序。2.1:入队:每次入度为0的结点入队。1.初始时,计算每个结点入度。1:将二维图降成一维的序列。2:输出具有先后次序的序列。2.2:出队:队首结点出队。
2022-11-27 21:08:39 485
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人