算法知识点的学习
文章平均质量分 96
NoteLoopy
东北师范大学在读硕士
展开
-
LCA(倍增+Tarjan)和BFS、DFS以及Prim、Kruskal
文章目录LCA倍增并查集题目背景题目描述输入格式输出格式输入输出样例Tarjan算法LCA和倍增LCA和Tarjan深度优先搜索广搜BFS最小生成树普里姆算法(找点)克鲁斯卡尔算法(找边)Oil Deposits蜘蛛牌N皇后问题Agri-NetJungle RoadsLCA+倍增例题Connections between citiesLCA对于一棵树,求两个节点的最近公共祖先(LCA)。如下图 1和 6 的 LCA 是 8 。11 和 1 的 LCA 是 8 。11 和 15 的 LCA原创 2021-01-30 15:16:39 · 884 阅读 · 2 评论 -
DP习题集
DP文章目录DP不同路径的最值合成目标值:达到目标的不同方式的个数区间合并字符串问题背包问题DP题解Hit the LotteryMaximum IncreaseFair DivisionQAQLast Year's SubstringAlex and a RhombusLast minute enhancementsEven Subset Sum ProblemKefa and First StepsFilling DiamondsSasha and His Trip、JoysticksLong Jum原创 2021-01-22 21:08:54 · 2255 阅读 · 0 评论 -
Stall Reservations(贪心算法)--学习笔记
问题描述有 n头牛(1<=n<=50,000)要挤奶。给定每头牛挤奶的时间区间[A,B] (1<=A<=B<=1,000,000,A,B为整数)。牛需要呆畜栏里才能挤奶。一个畜栏同一时间只能容纳一头牛。问至少需要多少个畜栏,才能完成全部挤奶工作,以及每头牛都放哪个畜栏里(Special judged)去同一个畜栏的两头牛,它们挤奶时间区间哪怕只在端点重合也...原创 2020-04-02 16:31:19 · 3001 阅读 · 9 评论 -
Santa Clau’s Gifts(贪心算法)--算法笔记
问题描述圣诞节来临了,圣诞老人准备分发糖果,现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣诞老人的驯鹿雪橇最多只能装下重量W的糖果,请问圣诞老人最多能带走多大价值的糖果。输入第一行由两个部分组成,分别为糖果箱数正整数n(1 <= n <= 100),驯鹿能承受的最大重量正整数w(0 < w < 10000),两个数用空...原创 2020-04-02 16:30:45 · 1859 阅读 · 2 评论 -
抓住那头牛(广搜)--算法学习
题目描述农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:1、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?思路(北大郭炜)假设农...原创 2020-03-31 15:06:54 · 5786 阅读 · 4 评论 -
城堡问题(深搜)--算法学习
问题描述下图是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成m×n(m≤50,n≤50)个方块,每个方块可以有0~4面墙。输入程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。...原创 2020-03-27 09:07:41 · 2530 阅读 · 4 评论 -
深度优先搜索--算法学习
在图上寻找路径简单来说,就是从起始点除法,每走过一个点就标记一个点,发现走到尽头的时候就回退,称为深搜。判断从V出发是否能走到终点定义一个函数,判断是不是你想要的终点,如果是的话,就直接结束,不是的话,就走过去并标记,对于他相邻的节点,如果是重点的话就结束,不是的话就继续。从这往下内容主要出自北大郭炜,本人学习作为笔记bool Dfs(V) { if( V 为终点)retu...原创 2020-03-26 19:32:02 · 2002 阅读 · 2 评论 -
神奇的口袋(动态规划)--算法学习
问题描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。 John现在有n(1≤n ≤ 20)个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。输入输入的第一行...原创 2020-03-25 17:20:19 · 2516 阅读 · 3 评论 -
Charm Bracelet背包问题(动态规划)--算法学习
问题描述有N件物品和一个容积为M的背包。第i件物品的体积w[i],价值是d[i]。求解将哪些物品装入背包可使价值总和最大。每种物品只有一件,可以选择放或者不放(N<=3500,M <= 13000思路用 F[i][j] 表示取前i种物品,使它们总体积不超过j的最优取法取得的价值总和。要求F[N][M]边界:if (w[1] <= j)F[1][j] = d...原创 2020-03-25 17:20:04 · 2360 阅读 · 2 评论 -
滑雪(动态规划)--算法学习
问题描述Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 1...原创 2020-03-25 17:19:41 · 2483 阅读 · 3 评论 -
Help Jimmy(动态规划)--算法学习
题意“Help Jimmy” 是在下图所示的场景上完成的游戏:场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能...原创 2020-03-25 17:19:12 · 2973 阅读 · 3 评论 -
最长公共子序列(动态规划)--算法学习
问题描述给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。Sample Inputabcfbc abfcabprogramming contestabcd mnpSample Output420思路来自北大郭炜输入两个串s1,s2,设MaxLen(i,j)表示:s1的左...原创 2020-03-24 17:36:15 · 1996 阅读 · 0 评论 -
最长上升子序列(动态规划)--算法学习
问题描述一个数的序列ai,当a1 < a2 < … < aS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK<= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子...原创 2020-03-24 17:35:55 · 1970 阅读 · 1 评论 -
数字三角形(动态规划)--算法学习
问题73 88 1 02 7 4 44 5 2 6 5在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。...原创 2020-03-24 17:35:36 · 2972 阅读 · 1 评论 -
动规解题的一般思路--算法学习
该思路来自于北大郭炜老师微博:http://weibo.com/guoweiofpku递归函数有n个参数,就定义一个n维的数组,数组的下标是递归函数参数的取值范围,数组元素的值是递归函数的返回值,这样就可以从边界值开始,逐步填充数组,相当于计算递归函数值的逆过程。第一步:原问题分解为子问题 把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决...原创 2020-03-24 17:33:51 · 1921 阅读 · 0 评论 -
求逆序数图解(分治)--算法学习
问题考虑1,2,…,n (n <= 100000)的排列i1,i2,…,in,如果其中存在j,k,满足 j <k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序。一个排列含有逆序的个数称为这个排列的逆序数。例如排列 263451 含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),因此该排列的逆...原创 2020-03-23 13:15:56 · 2948 阅读 · 0 评论 -
输出前m大的数(分治)--算法学习
描述给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输出。输入第一行包含一个整数n,表示数组的大小。n < 100000。第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。第三行包含一个整数m。m < n。输出从大到小输出前m大的数,每个数一行排序后再输出,复杂度 O(nlogn)用分治处理...原创 2020-03-23 13:15:36 · 2691 阅读 · 0 评论 -
快速排序图解(分治)--算法学习
思路数组排序任务可以如下完成:1)设k=a[0], 将k挪到适当位置,使得比k小的元素都在k左边,比k大的元素都在k右边,和k相等的,不关心在k左右出现均可 (O(n)时间完成)2) 把k左边的部分快速排序3) 把k右边的部分快速排序图解代码:#include <iostream>using namespace std;void swap(int &...原创 2020-03-23 13:15:13 · 2451 阅读 · 0 评论 -
归并排序图解(分治)--算法笔记
思路数组排序任务可以如下完成:1) 把前一半排序2) 把后一半排序3) 把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成。图解:代码#include <iostream>using namespace std;void Merge(int a[],int s,int m, int e,int tmp[]) {//将数组a的局部a[s,m]和a[m+...原创 2020-03-23 13:14:54 · 1959 阅读 · 0 评论 -
四则运算表达式求值(递归)--算法学习
问题输入为四则运算表达式,仅由整数、+、-、*、/ 、(、)组成,没有空格,要求求其值。假设运算符结果都是整数。"/"结果也是整数代码://来自北大郭 炜样例输入:(2+3)*(5+7)+9/3输出: 63#include <iostream>#include <cstring>#include <cstdlib>using...原创 2020-03-22 17:31:40 · 2508 阅读 · 1 评论 -
算24(递归)--算法学习
问题给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么...原创 2020-03-22 17:15:08 · 3582 阅读 · 0 评论 -
放苹果(递归)--算法学习
问题把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。输出对输入的每组数据M和N,用一行输出相应的K。样例输入17 3样例输出8解题思路...原创 2020-03-22 17:14:47 · 2737 阅读 · 0 评论 -
爬楼梯(递归)--算法学习
问题树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。输入输入包含若干行,每行包含一个正整数N,代表楼梯级数,1<= N <= 30输出不同的走法数,每一行输入对应一行输出不同的走法数,每一行输入对应一行输出样例...原创 2020-03-22 17:14:20 · 3220 阅读 · 0 评论 -
逆波兰表达式(递归)--算法学习
问题逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2+3的逆波兰表示法为+23.逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2+3)*4的逆波兰表示法为+234.本体求解逆波兰表达式的值,其中运算符包括±/四个输入输入为一行,其中运算符和运算数之间的都用空格分隔,运算数是浮点数输出输出为一行,表达式的值样例输入+11.0 12....原创 2020-03-22 17:13:49 · 3068 阅读 · 0 评论 -
N皇后问题(递归)--算法学习
问题输入一个正整数,则程序输出N皇后问题的全部摆法 输出结果里每一行都代表一种摆法,行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。皇后的行,列编号都是从1开始算解题思路从创建的数组第0行0列开始摆放皇后,然后依次摆放第1行皇后,后面每次摆放的时候都从0列开始放,判断是否冲突,如果不冲突,则摆放2行…n行。如果冲突的话则改变上一行皇后的位置,继续下一行的摆放。代码:...原创 2020-03-22 17:13:26 · 2147 阅读 · 0 评论 -
汉诺塔问题(递归)--算法学习
问题古代有一个塔,塔内有三个座A,B,C,A盘上有64个盘子,盘子大小不等,大的在下,小的在上,有一个和尚想把这64个盘子从A座移到C座,但是每次只允许移动一个盘子,并且在移动过程中,3个座上始终保持大盘在下,小盘在上, 在移动过程中可以利用B座,要求输出移动的步骤思路:用B盘子为中转,移动到C盘,先把A上的盘子移动到B,这时以C为中转,最后以A为中转将盘子移动到C,形成递归代码:...原创 2020-03-22 17:13:02 · 2213 阅读 · 0 评论 -
熄灯问题(枚举)--算法学习
问题有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。在上图中,左边矩阵中用X标记的按钮表示被按下,右边的矩阵表示灯状态...原创 2020-03-21 15:45:13 · 1121 阅读 · 0 评论 -
称硬币(枚举)--算法学习
问题有12枚硬币。其中11枚真硬币和1枚假硬币。假币和真币重量不同但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次告诉你称的结果,请你找出假币并确定假币是轻还是重(数据保证一定能找出来)输入第一行是测试数据组数。每组数据有三行,每行表示一次称量的结果。硬币标号为A-L。每次称量的结果用三个以空格隔开的字符串表示:天平左边放置的硬币 天平右边放置的硬币 平衡状态。其中平衡状...原创 2020-03-21 15:44:49 · 2155 阅读 · 1 评论 -
完美立方(枚举)--算法学习
问题形如a^3= b^3 + c^3 + d^3的等式被称为完美立方等式。例如12^3= 6^3 + 8^3 + 10^3 。编写一个程序,对任给的正整数N(N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 +c3 + d3,其中a,b,c,d 大于1, 小于等于N,且b<=c<=d。输入一个正整数N (N≤100)。输出每行输出一个完美立方。...原创 2020-03-21 15:43:58 · 2005 阅读 · 4 评论 -
STL_multimap和STL_map--算法--笔记
STLset and mapmultimap容器里的元素,都是pair形式的multimap<T1,T2>map;则map里的元素都是如下类型:struct{ T1 first;//关键字 T2 Second;//值 };和java的map差不多都是k-V对,只是方法形式不同。multimap中的元素按照first排序,并可以按first进行查找缺省的排...原创 2020-03-20 21:57:24 · 2070 阅读 · 0 评论 -
STL_multiset和STL_set--算法--笔记
STLSTL_multisetSTL_setSTL_multiset方法:multiset<T>st;定义了一个multiset变量st,st里面可以存放T类型数据,并且能自动排序。开始st为空排序规则:表达式"a<b"为true,则a排在b前面可用的方法目的格式添加元素st.insert查找元素st.find删除元素st.e...原创 2020-03-20 21:56:54 · 3701 阅读 · 1 评论 -
STL中的二分查找法--算法--笔记
二分查找binary_searchlower_boundupper_boundlow_bound,upper_boundbinary_search用binary_search进行二分法查找(用法一)方法:binary_search(数组名+n1,数组名+n2,值);注:1:n1和n2都是int类型的表达式,可以包含变量,如果n1=0,则+n1可以不写查找区间为下标范围为[n1.n2)...原创 2020-03-19 19:30:34 · 2523 阅读 · 0 评论 -
STL模板库之sort--算法--笔记
sort用法sort(用法一)sort(用法二)sort(用法三)sort(用法一)对基本类型的数组从小到大排序sort(数组名+n1,数组名+n2);n1和n2都是int类型的表达式,可以包含变量如果n1=0,则+n1可以不写将数组中下标范围为[n1,n2)的元素从小到大排序,下表为n2的元素不在排序区间内int a[]={15,4,3,9,7,2,6};sort(a,a+7...原创 2020-03-19 19:30:11 · 2419 阅读 · 0 评论 -
程序或算法的时间复杂度--算法--笔记
目录一:概念和分类二:关于复杂度的计算三:二分法求方程的根四:案例:复杂度与使用算法一:概念和分类概念:一个程序或算法的时间效率,也称时间复杂度,复杂度计算复杂度的秩统计执行次数最多的那种固定操作的次数。分类:平均复杂度和坏复杂度注意:如果复杂度时多个n的函数之和,则只关心随n的增长增长最快的那个函数名称复杂度常数复杂度o(1)对数复杂度o(log(n)...原创 2020-03-19 19:29:40 · 3583 阅读 · 2 评论