算法学习
文章平均质量分 84
Raine Wang
这个作者很懒,什么都没留下…
展开
-
中序线索二叉树的建立与遍历(from: 王道考研)
【代码】中序线索二叉树的建立与遍历(from: 王道考研)原创 2023-08-16 22:10:03 · 63 阅读 · 0 评论 -
动态规划:线性dp、背包问题、区间4
三个串的最长公共子序列给3个串,求其最长公共子序列,输出方案。|S|<=300。令f[i][j][k]为第1个串的前i个字符与第2个串的前j个字符与第3个串的前k个字符的最长公共子序列长度。若a[i]==b[i]==c[i],则f[i][j][k]=f[i-1][j-1][k-1]+1,否则三个字符中一定有一个是没用的,即 f[i-1][j][k]、f[i][j-1][k]、f[i][j][k-1]三个值中取一个最大的。输出方案怎么办?可以直接将最长公共子序列存下来。若a[i]==b[.原创 2022-04-13 15:17:13 · 210 阅读 · 0 评论 -
动态规划:线性dp、背包问题、区间3
区间DP2955 -- Brackets给定一个由字符 a1a2 ... an 组成的括号序列,你的目标是找到最长的正则括号序列的长度,它是 s 的子序列。也就是说,您希望找到最大的 m,使得对于索引 i1、i2、...、im,其中 1 ≤ i1 < i2 < ... < im ≤ n,ai1ai2 ... aim 是常规括号序列。接下来就是强行把自己讲懂的……QAQ子状态:我们想,既然最后要求的是从0到len-1的区间中有多少个括号被匹配,那这个答案是怎么推过来的原创 2022-03-24 14:40:11 · 993 阅读 · 0 评论 -
动态规划:线性dp、背包问题、区间2
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网题目描述字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列 < i0,i1,…,ik-1 > ,使得对所有的j=0,1,…,k-1,有xij = yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。对给定的两个字符序列,求..原创 2022-03-20 09:07:29 · 1132 阅读 · 0 评论 -
动态规划:线性dp、背包问题、区间1
记忆化搜索将之后可以重复用到的子问题的答案进行记录。典例:斐波那契数列、走楼梯、走蜂窝。斐波那契改进:走楼梯,第i阶台阶不能走。直接强行让第i级台阶方案数等于0即可。推广:从起点到终点的最短路径方案数,可以通过广搜标记计算每一个点到达的方案数。1163 -- The Triangle图 1 显示了一个数字三角形。编写一个程序,计算从顶部开始到底部某处结束的路线上通过的最大数字总和。每一步都可以对角线向左或向右对角线向下。从上往下写比较容易想,但从下往上写可以直接在顶点取到答案原创 2022-03-18 22:07:07 · 341 阅读 · 0 评论 -
搜索与搜索剪枝4
亿点思考地对于上一节的八数码问题,我们有了以下认知:实际上,广搜相当于可以记录从一个状态扩展到另一个状态的情况,很像数学上向量空间的概念。搜索剪枝核心:减少搜索树的大小改变搜索顺序:如可以让起点与终点双向奔赴;最优化剪枝:如当已经找到一个较优解的前提下,找到了一个比较优解更差的结果,那肯定在判断是较差解之后立刻终止寻找;可行性剪枝:虽然还没到达终点,但已经知道终点已经去不了了,即提前做预判。例1N*M的迷宫中给定起点s和终点d,问是否能在t时刻恰好到达终点d。原创 2022-03-16 09:28:24 · 251 阅读 · 0 评论 -
搜索与搜索剪枝3
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网八数码You will receive a description of a configuration of the 8 puzzle. The description is just a list of the tiles in their initial positions, with the rows listed from top to bottom, and the tiles listed from left to righ.原创 2022-03-12 15:51:40 · 2764 阅读 · 0 评论 -
搜索与搜索剪枝2
广搜给定一个迷宫,求(0,0)到终点(6,5)的最短距离。细节问题:可以通过将(x,y)处理为x*tmp+y的形式进行降维打击,这样更好向queue里存数据;另外,计算步数当然是根据前一步的步数算啦!QAQ/*6 51 1 0 1 11 0 1 1 11 0 1 0 01 0 1 1 11 1 1 0 11 1 1 1 1*/#include<iostream>#include<cstdio>#include<cstring>#i原创 2022-03-11 20:26:58 · 954 阅读 · 0 评论 -
搜索与搜索剪枝1
深搜力扣-N皇后n皇后问题 研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的n皇后问题 的解决方案。每一种解法包含一个不同的n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。题目的关键在于如何判断是否可以放,即vis的标志该如何选定?毕竟标记矩阵实在是太麻烦了。行和列很好解决,关键在于对角线的标记。可以发现以下规律:主对角线元素之差为确定元素,而副对角线元素之和为确定元素。考虑到...原创 2022-03-10 22:03:50 · 63 阅读 · 0 评论 -
优先队列、并查集2
Task有n个机器,m个任务。每个机器至多能完成一个任务。对于每个机器,有一个最大运行时间xi和等级yi,对于每个任务,也有一个运行时间xj和等级yj。只有当xi>=xj且yi>=yj的时候,机器i才能完成任务j,并获得500*xj+2*yj金钱。问最多能完成几个任务,当出现多种情况时,输出获得金钱最多的情况。xi<=1440,yi<=1001<=N<=100000,1<=M<=100000我们按x为第一关键字、y为第二关键字从大到小为机器.原创 2022-03-10 18:44:55 · 3199 阅读 · 0 评论 -
优先队列、并查集1
优先队列又名二叉堆,分为最大堆和最小堆。插入元素后,队列中自动按照从小到大/从大到小排列,删除元素只能删除队首元素(最大/最小值)。C++中STL提供容器:priority_queue,其默认形式是最大堆,即从大到小排。链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网[NOIP2004]合并果子因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体原创 2022-03-09 14:58:45 · 932 阅读 · 0 评论 -
堆栈、队列、单调栈、单调队列
例1有n个人,按照1,2,3……的顺序依次进栈,判断能否以题目所给顺序出栈。随进随判断能不能弹出。#include<iostream>#include<cstdio>#include<stack>using namespace std;int n,a[maxn];stack<int>st;int main(){ cin>>n; for(int i=1;i<=n;++i) cin>>a[i]; .原创 2022-03-06 17:26:29 · 489 阅读 · 0 评论 -
二分、三分、01规划3
三分比如求一段连续凸曲线的最大值,第一反应可能是求导。但其实可以用三分的方法去解。-----left-----mid1-----mid2-----right----- 请将左侧例子自动想成一段连续凸曲线上的5段,段与段之间相隔的为我们设的点。若mid1的值大于mid2的值,则说明波峰不可能出现在right的右侧,此时舍去这一段。另外,如果连续可导也可以先求导再通过二分寻找答案。二分、三分中的精度问题有的题目要求我们使用double求解答案,一般我们会将结束循环的条件设置为一个很小的数,但这种原创 2022-03-05 21:00:17 · 164 阅读 · 0 评论 -
二分、三分、01分数规划2
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网[CQOI2010]扑克牌你有n种牌,第i种牌的数目为ci。另外有一种特殊的牌:joker,它的数目是m。你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套牌。比如,当n=3时,一共有4种合法的套牌:{1,2,3}, {J,2,3}, {1,J,3}, {1,2,J}。 给出n, m和ci,你的任务是组成尽量多的套牌。每张牌最多只能用在一副套牌里(可以有牌不使用)。思路:依然是二分寻找.原创 2022-03-05 17:00:38 · 172 阅读 · 0 评论 -
二分、三分、01分数规划1
例1给一串n个单调递增的数,有q次询问>=x且<=y的数有多少个。1<=n<=10^5;1<=q<=50000认准一种算法,开始解释。解释详见代码,推荐在写代码时找例子试试,不用死记硬背。为了防止l+r越界 ,可以写成这种形式:mid=l+(r-l)/2;#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>.原创 2022-03-04 20:07:47 · 233 阅读 · 0 评论 -
递归与分治思想3
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网中序序列给定一棵有n个结点的二叉树的先序遍历与后序遍历序列,求其中序遍历序列。若某节点只有一个子结点,则此处将其看作左儿子结点左儿子结点可以作为后序遍历序列中左子树和右子树的分界点,其余正常遍历即可。class Solution {public: vector<int> v; void deal(int pl,int pr,int sl,int sr, vector<int>&a...原创 2022-03-04 13:09:37 · 159 阅读 · 0 评论