- 博客(16)
- 收藏
- 关注
原创 动态规划:线形,树形,矩阵
a. 一推一型,e.g.等比等差数列,q(n)=q(n-1)*p(注:p为公比),a(n)=a(n-1)+b(注:b为公差),累加和s(n)=s(n-1)+n,累乘积f(n)=f(n-1)*n。b. 多推一型,e.g.兔子数列f(n)=f(n-1)+f(n-2),最长不降子序列。b. 多推一(人人为我):数塔问题,背包问题,最长公共子序列。a. 一推多(我为人人):数塔问题。(2)树形:(分枝和分层都清晰)(1)线形:(分枝或分层清晰)(3)矩阵形:(分层清晰)a. 父推子(一推多)b. 子推父(多推一)
2023-01-31 17:39:51
89
原创 BFS广度优先搜索
(3)DFS使用的必要变量有vis[]、ans[],BFS使用的变量有vis[]、father[](2)DFS使用的是栈(是隐式的栈,先进后出),BFS使用的是队列(先进先出,后进后出)(2)重点要考虑孩子的合法性判断,即他的重复性和是否符合约束条件。(3)通常DFS可以找到所有的路径,BFS很快可以找到最短路径。(1)重点考虑父亲和孩子的关系,即知道父亲就可以找到所有的孩子。(1)DFS是按枝搜索,BFS是按层搜索。(2)用STL实现队列(推荐使用)(1)用普通数组实现队列。BFS的两种实行方式。
2023-01-31 16:08:16
74
原创 DFS算法(深度优先搜索)
a. 判孩子(当根节点是虚空的时候,比如子集树,排列树,拆分树,组合树)c. 子集树:左孩子为0,右孩子为1。b. 判父亲(当根节点不是虚空的时候,比如搜索树)a. 排序树:孩子不与祖先重复。e. 搜索树:孩子不与祖先重复。b. 组合树:孩子大于父亲。d. 拆分树:孩子>=父亲。e. 搜索树(找起点到终点的所有路径)注:黄色点是返回时的标注。2. 判答案的两种方法。
2022-12-25 15:06:02
171
原创 基本算法(模拟与枚举)
实例:回文日期,火柴棒等式,因式分解,数字游戏,计数问题,数字统计。实例:开关灯,校门外的树,陶陶摘苹果,ISBN号码。return 0:整个程序结束。break:跳出一层循环。
2022-12-24 21:07:31
61
原创 c++基础知识复习
如果要将数组设置成任意一个数,对于一维数组,用一重for循环逐个设置;对于二维数组,用二重for循环逐个设置。5. 在函数内部(不管是主函数还是子函数)定义的变量叫局部变量,在函数外部定义的变量叫全局变量。3. memset将一个数组的初始值制成0,-1,一个很大的数,是很容易实现的,其他不能实现。4. continue是跳过本次循环,break是跳出整个循环,return是直接结束程序。2. 数值型数组在全局定义其初始值为0,在局部定义其值未知。6. string字符串相关操作。
2022-12-10 13:34:23
123
原创 背包问题求解
1. 求解方法(1)贪心算法(按价值排序,依次选取),局部最优并不能保证全局最优。(2)贪心算法(按性价比排序,依次选取),局部最优并不能保证全局最优。(3)枚举法(子集树)用子集树枚举出所有的方案,然后挑选符合要求的最佳方案。缺点是时间复杂度太高。(4)动态规划f[i][j]表示前i个物品放在容量为j的背包中获取的最大价值 .情况1:第i个物品能放进容量为j的背包中,此时获取的最大价值就是f[i-1][j-w[i]]+v[i]。情况2:第i个物品不能放进容量为j的背包中,此时获取的最大价值就是f[i-1]
2022-12-03 22:08:14
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人